Sql 将字符串转换为具有非标准值的日期时间格式

Sql 将字符串转换为具有非标准值的日期时间格式,sql,sql-server,tsql,datetime,Sql,Sql Server,Tsql,Datetime,我有一个问题,我创建的一个列包含一个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. 它们是这种格式的,因为它们是从照片的元数据中获取的,我是否可以将其转换为datetime?您可以

我有一个问题,我创建的一个列包含一个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.
它们是这种格式的,因为它们是从照片的元数据中获取的,我是否可以将其转换为datetime?

您可以使用
stuff()
并修复初始冒号。然后,我将明确使用该格式:

select convert(DATETIME, stuff(stuff(DATE_TAKEN, 5, 1, '-'), 8, 1, '-'), 120)
您可以使用:

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)

@k_schultz现在就试试看,如果有像“2016:1:12 13:27:05”这样的日期怎么办?
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)))