在SQL Server

时间:2017-09-14 11:27:24

标签: sql sql-server datetime

我有一个varchar列,其值为“Aug 07 2017, 04:14 AM,EDT”。

我需要将其转换为日期列,以便可以获取date的最大值。

我试过了:

select CONVERT(datetime, @dateField, 108)  
from table

但是我收到以下错误:

  

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

3 个答案:

答案 0 :(得分:2)

您可以使用left()convert()

select convert(date, left('Aug 07 2017, 04:14 AM,EDT', 11))

如果您想要日期时间,请分别转换日期和时间,然后:

select ( convert(datetime,
                 left('Aug 07 2017, 04:14 AM,EDT', 11)
                ) +
         convert(datetime,
                 convert(time,
                         substring('Aug 07 2017, 04:14 AM,EDT', 14, 8)
                        )
                )
       )

注意:这不考虑时区。

答案 1 :(得分:0)

这是一个解决方案:

select CONVERT(datetime, REPLACE(LEFT(@dateField, LEN(@dateField) - 3),',','') ,108 ) 

答案 2 :(得分:0)

更好的日期时间解决方案

DECLARE @dateField AS NVARCHAR(50) = 'Aug 07 2017, 04:14,EDT'
-- Get index of last comma
DECLARE @validDateField AS NVARCHAR(20) = REPLACE(LEFT(@dateField, LEN(@dateField)- CHARINDEX(',', reverse(@dateField))), ',','')
SELECT CONVERT(DATETIME, @validDateField, 108)