如何将此字符串转换为特定的日期格式?

问题描述 投票:0回答:2

我正在使用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月”。

现在,我想将“ 2017年10月”转换为2017-10-01格式的“ datetime”。这就是我被困住的地方。

我尝试了以下操作:

SELECT CONVERT(datetime, (RIGHT([ReviewDate], 8)), 121) as [ReviewDate2]

以上语法为我提供了以下错误消息:“从字符串转换日期和/或时间时转换失败。”

SELECT CAST( (RIGHT([ReviewDate], 8)) as datetime) as [ReviewDate2]

上面的语法给了我相同的错误消息:“从字符串转换日期和/或时间时转换失败。”

一些帮助,将不胜感激。

sql-server tsql datetime nvarchar
2个回答
1
投票

您的所有查询都是正确的,但请确保它不应包含除日期部分以外的任何其他字符串。

[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]

FIDDLE DEMO


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]

dbfiddle<>

© www.soinside.com 2019 - 2024. All rights reserved.