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

SQL Server存储过程中如何将日期时间格式化为yyyyMMdd和hhmm?

T-SQL 存储过程实现日期时间格式化方案

嘿,我来帮你搞定这个问题!你当前的代码只是把日期时间值赋值给了DATETIME和TIME类型变量,但这两种类型本身是存储日期时间的数值信息,并不会保留你想要的yyyyMMdd或hhmm格式——格式是显示层面的操作。如果要存储格式化后的文本结果,变量类型得换成VARCHAR,再配合合适的格式化函数来实现。

下面给你两种可行的实现方案:

方案1:使用FORMAT函数(SQL Server 2012及以上版本适用)

FORMAT函数语法更直观,直接通过格式字符串就能得到想要的结果,非常适合快速实现需求:

BEGIN
    -- 声明字符串类型变量,存储格式化后的日期和时间
    DECLARE @formattedDate VARCHAR(8)
    DECLARE @formattedTime VARCHAR(4)

    -- 格式化当前日期为yyyyMMdd格式
    SET @formattedDate = FORMAT(GETDATE(), 'yyyyMMdd')
    -- 格式化当前时间为24小时制的hhmm格式(如果要12小时制用'hhm',但通常业务场景用24小时制更多)
    SET @formattedTime = FORMAT(SYSDATETIME(), 'HHmm')

    -- 可选:验证格式化结果
    SELECT @formattedDate AS 当前日期, @formattedTime AS 当前时间
END

方案2:使用CONVERT函数(兼容SQL Server 2008及更早版本)

如果你的SQL Server版本比较旧,FORMAT函数不支持,就用CONVERT函数配合字符串截取来实现,兼容性更好:

BEGIN
    DECLARE @formattedDate VARCHAR(8)
    DECLARE @formattedTime VARCHAR(4)

    -- CONVERT的style参数112对应标准的yyyyMMdd格式
    SET @formattedDate = CONVERT(VARCHAR(8), GETDATE(), 112)
    -- 先把时间转成HH:mm:ss格式(style=108),再截取时分部分拼接成hhmm
    SET @formattedTime = LEFT(CONVERT(VARCHAR(5), SYSDATETIME(), 108), 2) + RIGHT(CONVERT(VARCHAR(5), SYSDATETIME(), 108), 2)

    SELECT @formattedDate AS 当前日期, @formattedTime AS 当前时间
END

关键注意点

  • 变量类型必须用VARCHAR(或NVARCHAR):DATETIME/TIME类型存储的是日期时间的原始值,无法直接保存格式化后的文本,你之前的问题核心就在这里。
  • 时间格式的区分:HH是24小时制(比如13点会显示为13),hh是12小时制(13点会显示为01),根据你的业务需求选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:25:51