将 varchar "dd/mm/yyyy hh:mm:ss" 转换为 datetime2

Kro*_*ron 2 sql sql-server date datetime2

我有一列 varchar(50) 格式的日期,写为“dd/mm/yyyy”,我需要将其转换为 datetime2 格式,但是当它运行时,它假定格式为“mm/dd/yyyy”并相应地进行转换,当日期字段超过 12 时抛出错误。如何让它以正确的方式提取数据?

例如

03/04/2017 00:00:00
03/04/2017 00:00:00
15/06/2017 00:00:00
15/06/2017 00:00:00
17/05/2017 00:00:00
Run Code Online (Sandbox Code Playgroud)

最后 3 次投掷失误。

当前命令:

select case when try_convert(datetime2,[Date]) is not null
    then cast([Date]as datetime2)
    else null
    end, [Date]
from [Source1]
Run Code Online (Sandbox Code Playgroud)

结果:

2017-03-04 00:00:00.0000000  03/04/2017 00:00:00
2017-03-04 00:00:00.0000000  03/04/2017 00:00:00
NULL                         15/06/2017 00:00:00
NULL                         15/06/2017 00:00:00
NULL                         17/05/2017 00:00:00
Run Code Online (Sandbox Code Playgroud)

use*_*983 5

试试这个:

WITH VTE AS (
    SELECT *
    FROM  (VALUES ('03/04/2017 00:00:00'),
                  ('03/04/2017 00:00:00'),
                  ('15/06/2017 00:00:00'),
                  ('15/06/2017 00:00:00'),
                  ('17/05/2017 00:00:00')) V(StringDatetime))
SELECT *,
       TRY_CONVERT(datetime2(0), VTE.StringDatetime, 103) AS NonStringDatetime2
FROM VTE;
Run Code Online (Sandbox Code Playgroud)

您可以在文档中找到样式代码列表:日期和时间样式