在 SQL Server 中将字符串转换为日期

Posted

技术标签:

【中文标题】在 SQL Server 中将字符串转换为日期【英文标题】:Convert string into date in SQL Server 【发布时间】:2016-01-16 07:06:03 【问题描述】:

从字符串转换日期和/或时间时转换失败。

在 SQL Server 中运行此语句时出现上述错误:

SELECT CONVERT(datetime, 'Fri, 15 Jan 2016 17:30:05 GMT')

其实我想在Datetime列中插入相同的字符串格式

【问题讨论】:

预期结果是什么。是否要转换为当地时间 CONVERT 似乎不支持您当前时间戳的格式,因此我认为您需要对其进行处理才能使转换生效。 其实我想在日期时间列中插入相同的字符串格式 以易于处理的形式将数据呈现给 SQL Server:ISO 8601 format。 【参考方案1】:

正如 Tim Biegeleisen 所建议的,该字符串需要经过处理才能进行转换。为了转换它,您需要去掉当天 (Fri,) 和最后的 GMT 时区,例如:

DECLARE @date varchar(50) = 'Fri, 15 Jan 2016 17:30:05 GMT'
SELECT  CONVERT(DATETIME, SUBSTRING(@date, 5, LEN(@date) - 8), 113)

此解决方案确实会去除时区信息,如果您想将其转换回 UTC,请查看post。

【讨论】:

【参考方案2】:

如果要将字符串'Fri, 15 Jan 2016 17:30:05 GMT' 插入datetime 列,则需要在插入之前从字符串中删除Fri,GMT

SELECT CAST(substring(@str_date,5,len(@str_date)-8) as datetime)

DEMO

【讨论】:

以上是关于在 SQL Server 中将字符串转换为日期的主要内容,如果未能解决你的问题,请参考以下文章

在函数 SQL Server 中将字符串转换为日期时间

在 MS SQL Server 中将字符串转换为日期时间

在 PHP Laravel 中的 SQL Server 中将字符串转换为日期数据类型

SQL Server 将字符串转换为日期时间

在 SQL Server 中将 varchar 转换为 datetime [重复]

在 C# 中将十六进制值从 SQL Server 转换为日期时间