如何在SQL Server中将字符串'Tue, 07 Dec 2021 04:35:05 GMT'转换为smalldatetime格式(yyyy-mm-dd hh:mm:ss)
解决方案:SQL Server中将GMT时间字符串转换为smalldatetime
首先要明确一点:smalldatetime是SQL Server的日期时间存储类型,本身不存储显示格式——我们的目标是先把输入的GMT字符串转换成smalldatetime,再按需输出成yyyy-mm-dd hh:mm:ss格式的字符串。
下面提供两种可靠的实现方式:
方法1:使用PARSE函数(推荐,无需手动清理字符串)
PARSE函数支持识别带星期、GMT后缀的国际标准时间格式,非常适配你的场景:
-- 定义输入字符串 DECLARE @InputTime NVARCHAR(50) = 'Tue, 07 Dec 2021 04:35:05 GMT' -- 转换为smalldatetime类型 DECLARE @TargetSmallDatetime SMALLDATETIME = PARSE(@InputTime AS SMALLDATETIME USING 'en-US') -- 如果需要以指定格式输出为字符串 SELECT CONVERT(NVARCHAR(20), @TargetSmallDatetime, 120) AS FormattedResult
执行后会得到:2021-12-07 04:35:00(注意:smalldatetime仅精确到分钟,秒数会被截断/四舍五入,这是该类型的固有特性)
方法2:使用CONVERT函数(性能更优,需先清理字符串)
如果追求更好的执行性能,可以先手动去掉字符串末尾的GMT后缀,再用CONVERT指定对应样式完成转换:
DECLARE @InputTime NVARCHAR(50) = 'Tue, 07 Dec 2021 04:35:05 GMT' -- 移除末尾的' GMT'部分 DECLARE @CleanedTime NVARCHAR(50) = LEFT(@InputTime, LEN(@InputTime) - 4) -- 转换为smalldatetime(样式100支持带星期的英文日期格式) DECLARE @TargetSmallDatetime SMALLDATETIME = CONVERT(SMALLDATETIME, @CleanedTime, 100) -- 输出指定格式的字符串 SELECT CONVERT(NVARCHAR(20), @TargetSmallDatetime, 120) AS FormattedResult
关键注意事项
- smalldatetime的精度限制:该类型只能存储到分钟级别,秒数会被自动处理(0-29秒截断为0,30-59秒进1分钟)。如果需要保留秒级精度,建议改用
datetime或datetime2类型。 - 异常处理:如果输入字符串存在格式错误,建议使用
TRY_PARSE或TRY_CONVERT代替,避免转换失败抛出错误。
内容的提问来源于stack exchange,提问作者Shankar
相关产品推荐
相关产品推荐

