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
相关产品推荐
相关产品推荐

