我遇到了一个问题,我创建的列包含一个nvarchar字段,其日期为此格式' 2016:10:12 13:27:05'
convert(DATETIME, DATE_TAKEN)
返回此
Msg 241, Level 16, State 1, Line 2
Conversion failed when converting date and/or time from character string.
他们采用这种格式,因为它们取自照片中的元数据,无论如何我可以将其转换为日期时间吗?
答案 0 :(得分:3)
您可以使用:
SELECT CAST(REPLACE(LEFT(DATE_TAKEN, t.i), ':', '-') +
RIGHT(DATE_TAKEN, t.l - t.i) AS DATETIME)
FROM mytable
OUTER APPLY (
SELECT CHARINDEX(' ', DATE_TAKEN),
LEN(DATE_TAKEN)) AS t(i, l)
答案 1 :(得分:2)
您可以使用stuff()
并修复初始冒号。然后,我也会明确地使用这种格式:
select convert(DATETIME, stuff(stuff(DATE_TAKEN, 5, 1, '-'), 8, 1, '-'), 120)
答案 2 :(得分:0)
declare @date varchar(50) = '2016:10:12 13:27:05';
declare @spaceIndex int = charindex(' ', @date);
declare @dateVal varchar(10) = replace(left(@date, @spaceIndex),':','.')
declare @timeVal varchar(10) = right(@date, len(@date) - @spaceIndex)
--using the variables
select convert(Datetime, @dateVal +' '+ @timeVal)
--or inline version
select convert(Datetime, replace(left(@date, charindex(' ', @date)),':','.') +' '+ right(@date, len(@date) - charindex(' ', @date)))