SQL Server如何将GMT日期字符串转为指定格式datetime
SQL Server 转换RFC格式GMT日期为指定格式的方法
你提供的Fri, 24 Jun 2022 16:44:39 GMT是标准RFC 1123格式的时间字符串,转换时需要注意:datetime类型本身是二进制存储的时间值,没有固定显示格式,你需要的yyyy:mm:dd hh:mm:ss属于字符串层面的展示格式,不要混淆存储类型和展示格式的差异。
具体实现步骤
1. 将GMT字符串转换为datetime类型
根据你使用的SQL Server版本选对应写法即可:
- SQL Server 2012及以上版本(推荐写法,无需手动处理字符串):
直接用PARSE函数指定英文区域识别格式:-- 单值转换示例 SELECT PARSE('Fri, 24 Jun 2022 16:44:39 GMT' AS datetime USING 'en-US') AS DateTimeValue; - 兼容SQL Server 2008及更早版本:
先去掉字符串末尾的GMT后缀,再用样式码113(欧洲格式英文月份时间)做转换,字符串开头的星期缩写SQL Server会自动忽略:SELECT CONVERT(datetime, REPLACE('Fri, 24 Jun 2022 16:44:39 GMT', ' GMT', ''), 113) AS DateTimeValue;
2. 格式化为yyyy:mm:dd hh:mm:ss格式字符串
如果需要输出指定格式的字符串结果,在第一步转换为datetime的基础上做格式化即可:
- SQL Server 2012及以上版本,用
FORMAT函数直接指定格式串:DECLARE @rawStr VARCHAR(50) = 'Fri, 24 Jun 2022 16:44:39 GMT'; SELECT FORMAT(PARSE(@rawStr AS datetime USING 'en-US'), 'yyyy:MM:dd HH:mm:ss') AS FormattedResult; -- 输出结果:2022:06:24 16:44:39 - 低版本兼容写法,先转成
yyyy-MM-dd HH:mm:ss标准字符串,再把横杠替换为冒号:DECLARE @rawStr VARCHAR(50) = 'Fri, 24 Jun 2022 16:44:39 GMT'; SELECT REPLACE(CONVERT(VARCHAR(19), CONVERT(datetime, REPLACE(@rawStr, ' GMT', ''), 113), 120), '-', ':') AS FormattedResult;
补充说明
- 生产环境建议时间字段一律用
datetime/datetime2类型存储,不要存格式化后的字符串,避免后续做时间计算、范围查询时出现类型转换错误。 - 如果需要把GMT时间转换为本地时区(比如东八区北京时间),可以用
datetimeoffset类型配合AT TIME ZONE实现:-- 转换为北京时间示例 SELECT PARSE('Fri, 24 Jun 2022 16:44:39 GMT' AS datetimeoffset USING 'en-US') AT TIME ZONE 'China Standard Time' AS CST_Time; -- 输出结果:2022-06-25 00:44:39.0000000 +08:00
内容的提问来源于stack exchange,提问作者willy sepulveda
相关产品推荐
相关产品推荐

