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

如何在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:208:20 AM
14:302:30 PM
00:1512:15 AM
23:5911: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:54:21