SQL将VARCHAR子字符串转换为DateTime

时间:2017-08-31 18:50:00

标签: sql sql-server

编辑:我在美国,日期时间是MDY

我正在使用SQL Server来解决语法问题。我有一个文本列,列出了日期。看起来像这样

DATE:05/04/2017 AMOUNT:500

此列在每条记录中都相同。我想专门查看日期部分,所以我使用了基本的SUBSTRING

Select
    Field1, SUBSTRING(Field2, 6, 10)
From 
    Table1

SUBSTRING确实会显示日期,但它是VARCHAR格式。

我尝试做一个像

这样的基本转换
Select
    Field1, CONVERT(DATETIME, SUBSTRING(Field2, 6, 10))
From 
    Table1

但我收到错误

  

Msg 241,Level 16,State 1,Line 21
  从字符串转换日期和/或时间时转换失败。

有谁知道我如何能够以日期格式从字符串中成功提取日期,所以我可以将其链接到其他表格?

2 个答案:

答案 0 :(得分:1)

在尝试转换之前,请确保您的服务器set the DATEFORMAT格式正确。由于您显示的样本数据是2017年4月5日,我们无法告诉您是否有MDY或DMY,但您应该能够从其余数据中找出它。

此外,如果您想确切地找到导致转换错误的行,可以使用SQL 2012+中提供的TRY_CONVERT(),然后调查TRY_CONVERT()的结果所在的行。 NULL。

答案 1 :(得分:0)

您需要使用dateformat

101如果您使用美国标准mm / dd / yyyy 要么 103如果你使用英国的dd / mm / yyyy

declare @temp varchar(30)='DATE:05/04/2017 AMOUNT:500'

Select
CONVERT(DATETIME,SUBSTRING(@temp,6,10),101)

结果:

2017-05-04 00:00:00.000