我正在使用SQL Server 2014
,并且我有一个表(t1),其中包含nvarchar
格式的列(ReviewDate)。
此列的示例如下:
ReviewDate
Mr John wrote a review in Oct 2017
我需要从此字符串中提取“日期”组件。
为此,我的T-SQL如下:
SELECT (RIGHT([ReviewDate], 8)) as [ReviewDate 2]
FROM t1
这给了我“ 2017年10月”。
现在,我想将“ Oct 2017”转换为2017-10-01
格式的“ datetime
”。这就是我被困住的地方。
我尝试了以下方法:
SELECT CONVERT(datetime, (RIGHT([ReviewDate], 8)), 121) as [ReviewDate2]
以上语法为我提供了以下错误消息:“从字符串转换日期和/或时间时转换失败。”
SELECT CAST( (RIGHT([ReviewDate], 8)) as datetime) as [ReviewDate2]
上面的语法给了我同样的错误信息:
从字符串转换日期和/或时间时转换失败。
一些帮助将不胜感激。
答案 0 :(得分:2)
您所有的查询都是正确的,但请确保除日期部分外不应包含任何其他字符串。
For example SELECT CAST('x Oct 2017' AS DATE)
会给您类似
从字符转换日期和/或时间时转换失败 字符串。
SELECT CAST((RIGHT('Mr John wrote a review in Oct 2017', 8)) as datetime) as [ReviewDate2]
SELECT CAST('Oct 2017' AS DATE)
SELECT CONVERT(DATETIME, 'Oct 2017 ', 121) as [ReviewDate2]
答案 1 :(得分:0)
到目前为止,当我尝试投射时,您的示例文本在mssql中是有效的日期时间。您的表上似乎有一些无效的数据。尝试使用try_cast()
来包含那些无效数据。
declare @ReviewDate varchar(max)='Mr John wrote a review in Oct 2017'
set @ReviewDate = (RIGHT(@ReviewDate, 8))
select try_cast(@ReviewDate as datetime) as [ReviewDate2]