SQL Server中如何将12小时制字符串转换为24小时制时间?
将12小时制带a.m./p.m.的字符串转换为24小时制时间(SQL)
嘿,这个需求挺常见的,我来给你拆解下怎么实现。针对带有a.m./p.m.标识的varchar类型时间字符串,不同SQL数据库的实现略有差异,但核心思路都是用内置函数识别12小时制格式,再转成标准的24小时制时间类型。
SQL Server 实现
你给出的CONVERT( TIME(0), '12:00:00 a.m.' )其实已经能生效,但为了避免格式识别异常,更稳妥的方式是加上样式参数109,或者用PARSE函数(对英文时段标识的支持更直观):
-- 方法1:带样式参数的CONVERT SELECT CONVERT(TIME(0), '12:00:00 a.m.', 109) AS 24小时制时间; -- 输出结果:00:00:00 -- 方法2:PARSE函数 SELECT PARSE('01:30:45 p.m.' AS TIME USING 'en-US') AS 24小时制时间; -- 输出结果:13:30:45
MySQL 实现
MySQL用STR_TO_DATE函数解析12小时制字符串,格式符%h对应12小时制小时,%p可以匹配AM/PM(大小写、带点不带点的格式都能识别):
SELECT STR_TO_DATE('10:15:00 a.m.', '%h:%i:%s %p') AS 24小时制时间; -- 输出结果:10:15:00 SELECT STR_TO_DATE('02:45:30 p.m.', '%h:%i:%s %p') AS 24小时制时间; -- 输出结果:14:45:30
PostgreSQL 实现
PostgreSQL通过TO_TIMESTAMP解析格式,再转换为TIME类型即可:
SELECT TO_TIMESTAMP('12:00:00 p.m.', 'HH:MI:SS AM')::TIME AS 24小时制时间; -- 输出结果:12:00:00 SELECT TO_TIMESTAMP('09:20:10 a.m.', 'HH:MI:SS AM')::TIME AS 24小时制时间; -- 输出结果:09:20:10
关键注意点
- 要确保字符串格式和函数的格式参数完全匹配,比如
a.m./p.m.对应的格式符在不同数据库里写法略有区别 - 如果需要固定时间精度(比如你用的
TIME(0)表示无小数秒),转换时记得指定精度或截取对应部分
内容的提问来源于stack exchange,提问作者Tanner Ornelas
相关产品推荐
相关产品推荐

