You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中EXTRACT(HOUR_MINUTE)返回无冒号格式的问题求助

问题原因与解决方案

这问题我之前也踩过坑!核心原因是EXTRACT(HOUR_MINUTE FROM timestamp)返回的不是带格式的字符串,而是一个整数类型的值——它会把小时和分钟直接拼接成数字:比如8点25分就返回825,21点整返回2100,直接用CONCAT拼接自然就不会有冒号啦。

最简洁的解决方法:用TO_CHAR格式化时间

从语法来看你应该用的是PostgreSQL,这里的TO_CHAR函数可以直接把时间戳格式化成你想要的带冒号的字符串,代码修改如下:

CASE 
  WHEN TRUE THEN CONCAT('Aeg ', TO_CHAR(fp.valid_from, 'HH24:MI'), '-', TO_CHAR(fp.valid_to, 'HH24:MI'))
  ELSE 0 
END
  • HH24:表示24小时制的小时(如果要12小时制可以用HH12)
  • MI:表示分钟,自动补前导零(比如5分钟会显示成05)

这样就能直接得到你预期的8:25-21:00格式啦。

备选方案:拆分小时和分钟手动拼接

如果你不想用TO_CHAR,也可以分别提取小时和分钟,再手动拼接冒号,只是需要额外处理分钟的前导零:

CASE 
  WHEN TRUE THEN CONCAT(
    'Aeg ',
    EXTRACT(HOUR FROM fp.valid_from), ':', 
    LPAD(EXTRACT(MINUTE FROM fp.valid_from)::TEXT, 2, '0'),
    '-',
    EXTRACT(HOUR FROM fp.valid_to), ':', 
    LPAD(EXTRACT(MINUTE FROM fp.valid_to)::TEXT, 2, '0')
  )
  ELSE 0 
END

不过这种方法步骤更繁琐,不如TO_CHAR简洁,所以更推荐第一种方案。

内容的提问来源于stack exchange,提问作者Tarvo Mäesepp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 00:02:45