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
相关产品推荐
相关产品推荐

