我有一个varchar
列,其值为“Aug 07 2017, 04:14 AM,EDT
”。
我需要将其转换为日期列,以便可以获取date
的最大值。
我试过了:
select CONVERT(datetime, @dateField, 108)
from table
但是我收到以下错误:
从字符串转换日期和/或时间时转换失败。
答案 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)