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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:32:36