SQL Server使用FORMAT格式化time(2)字段返回NULL值问题
写法错误说明
FORMAT()函数的设计用途是格式化数值类型字段(比如实现千分位分隔、指定小数位数),不支持直接传入time类型字段做时间格式化,传入类型不匹配时函数会直接返回NULL,这就是你查询结果全是空值的核心原因。
额外说明:即使是在支持FORMAT()处理时间类型的数据库(比如SQL Server)里,你写的格式符hh:mm也存在问题:小写hh代表12小时制的小时,如果你要展示24小时制的时间需要用大写HH。
解决方法
你可以根据自己使用的数据库,选择对应正确的时间格式化函数:
- MySQL / MariaDB 场景:使用
DATE_FORMAT()函数,注意对应占位符不要写错,24小时制小时用%H,分钟用%i
SELECT DATE_FORMAT(startTime, '%H:%i') AS startTime FROM 你的表名;
- SQL Server 场景:优先用性能更好的
CONVERT()函数,也可以用适配时间类型的FORMAT()写法
-- CONVERT写法,108是hh:mm:ss的格式编码,取前5位正好是时:分 SELECT CONVERT(VARCHAR(5), startTime, 108) AS startTime FROM 你的表名; -- FORMAT正确写法,注意用大写HH表示24小时制 SELECT FORMAT(startTime, 'HH:mm') AS startTime FROM 你的表名;
- PostgreSQL 场景:使用
TO_CHAR()函数
SELECT TO_CHAR(startTime, 'HH24:MI') AS startTime FROM 你的表名;
如果不想写数据库方言相关的SQL,也可以直接在应用层处理:查询时直接读原始的startTime字段,拿到类似13:00:00的结果后,截取字符串前5位就能得到13:00的展示效果,兼容性更好。
内容的提问来源于stack exchange,提问作者bbz
相关产品推荐
相关产品推荐

