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

T-SQL如何将NVARCHAR日期值转换为mm/dd/yyyy hh:mmAM/PM格式

T-SQL 实现指定日期格式转换方案

针对需要将nvarchar类型存储的日期转换为MM/dd/yyyy hh:mmtt(即06/01/2022 12:00AM格式)的需求,可根据使用的SQL Server版本选择对应实现方式:

方案1:SQL Server 2012及以上版本(推荐)

直接使用FORMAT函数自定义输出格式,写法最简洁,结果完全匹配要求:

DECLARE @d NVARCHAR(255) = '2022-06-01'
SELECT FORMAT(CAST(@d AS DATETIME), 'MM/dd/yyyy hh:mmtt') AS FormattedDate

执行返回结果:06/01/2022 12:00AM,满足4位年份、无秒数、12小时制带AM/PM标识、月/日/年排序的全部要求。

方案2:SQL Server 2008 R2及更早版本(无FORMAT函数兼容方案)

通过日期函数拆分各部分字段后拼接,完全不依赖内置CONVERT样式编号,可控性更高:

DECLARE @d NVARCHAR(255) = '2022-06-01'
DECLARE @dt DATETIME = CAST(@d AS DATETIME)
SELECT 
    CONCAT(
        RIGHT('0' + CAST(MONTH(@dt) AS VARCHAR(2)),2), -- 两位月份,不足前补0
        '/',
        RIGHT('0' + CAST(DAY(@dt) AS VARCHAR(2)),2), -- 两位日期,不足前补0
        '/',
        YEAR(@dt), -- 四位年份
        ' ',
        RIGHT('0' + CAST(((DATEPART(HOUR,@dt) + 11) % 12 ) + 1 AS VARCHAR(2)),2), -- 12小时制小时,不足前补0
        ':',
        RIGHT('0' + CAST(DATEPART(MINUTE,@dt) AS VARCHAR(2)),2), -- 两位分钟,不足前补0
        CASE WHEN DATEPART(HOUR,@dt) < 12 THEN 'AM' ELSE 'PM' END -- 上下午标识
    ) AS FormattedDate

注意事项

  • 现有T-SQL内置的CONVERT样式编号没有完全匹配需求的选项,要么输出2位年份,要么强制带秒数,不建议通过字符串替换内置样式输出的方式实现,容易出现边界问题。
  • 由于审计列是多类型数据混存的nvarchar字段,生产环境使用时建议替换CAST为TRY_CAST做容错,遇到非日期格式的内容会返回NULL,不会导致整个查询报错。

内容的提问来源于stack exchange,提问作者Melinda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:45:30