如何在SQL Server中将24小时制字符串转换为12小时制时间
在SQL Server中将24小时制varchar时间转换为12小时制格式的查询方法
核心思路
由于存储的是varchar类型的24小时制时间字符串,需先将其转换为SQL Server原生TIME类型,再通过格式化函数输出为目标12小时制格式。
方法1:使用CONVERT函数(兼容所有SQL Server版本)
假设你的表名为TimeRecords,存储时间的列名为HourTime,查询语句如下:
SELECT HourTime AS 原始24小时制时间, -- 用LTRIM去除转换后前方的空格 LTRIM(CONVERT(VARCHAR(15), CAST(HourTime AS TIME), 100)) AS 转换后12小时制时间 FROM TimeRecords;
CAST(HourTime AS TIME):将字符串类型的时间转换为SQL Server原生TIME类型CONVERT的样式100会输出类似8:20AM的格式,配合LTRIM去掉前导空格,得到8:20 AM
方法2:使用FORMAT函数(SQL Server 2012及以上版本)
FORMAT函数支持更直观的格式字符串定义,写法更简洁:
SELECT HourTime AS 原始24小时制时间, FORMAT(CAST(HourTime AS TIME), 'h:mm tt') AS 转换后12小时制时间 FROM TimeRecords;
- 格式字符串
h:mm tt:h表示12小时制(不带前导零),mm表示分钟,tt表示AM/PM标识
示例效果
假设表中数据如下:
| 原始24小时制时间 |
|---|
| 08:20 |
| 14:30 |
| 00:15 |
| 23:59 |
执行查询后得到的结果:
| 原始24小时制时间 | 转换后12小时制时间 |
|---|---|
| 08:20 | 8:20 AM |
| 14:30 | 2:30 PM |
| 00:15 | 12:15 AM |
| 23:59 | 11:59 PM |
处理非法时间格式
如果varchar列中存在不符合HH:mm格式的无效数据,可以使用TRY_CAST替代CAST,避免查询中断并标记无效数据:
SELECT HourTime AS 原始时间, CASE WHEN TRY_CAST(HourTime AS TIME) IS NOT NULL THEN FORMAT(TRY_CAST(HourTime AS TIME), 'h:mm tt') ELSE '无效时间格式' END AS 转换后时间 FROM TimeRecords;
内容的提问来源于stack exchange,提问作者BlackCat
相关产品推荐
相关产品推荐

