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

时间:2017-02-21 15:58:34

标签: 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.

他们采用这种格式,因为它们取自照片中的元数据,无论如何我可以将其转换为日期时间吗?

3 个答案:

答案 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)

Demo here

答案 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)))