【问题标题】:Convert character string into this specific date format?将字符串转换为这种特定的日期格式?
【发布时间】:2019-11-05 05:48:08
【问题描述】:

我正在使用 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]

上面的语法给了我同样的错误信息:

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

我们将不胜感激。

【问题讨论】:

  • 这里有一个提示。尝试从 TableName 中选择 ReviewDate,其中 IsDate(RIGHT([ReviewDate], 8)) =0

标签: sql sql-server tsql datetime nvarchar


【解决方案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

【讨论】:

    【解决方案2】:

    到目前为止,当我尝试投射时,您的示例文本是 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<>

    【讨论】:

    • try_cast 成功了。我在该列中有一些无效字符!
    • @user3115933,太棒了
    猜你喜欢
    • 2018-08-30
    • 2014-09-12
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多