将包含各种格式的varchar转换为DATETIME

时间:2018-08-17 15:00:05

标签: sql sql-server datetime type-conversion

我有一个varchar类型的record_created列,其中包含以两种不同方式格式化的多个值。

  • 2017-04-17 16:55:53.3840460
  • 2015年9月18日晚上11:25

如何将该列转换为DATETIME以与GETDATE进行比较?

2 个答案:

答案 0 :(得分:0)

如果您使用的是SQL Server,则可以在此处使用CONVERT函数:

SELECT
    CONVERT(datetime, LEFT('2017-04-17 16:55:53.3840460', 23), 121) AS date1,
    CONVERT(datetime, 'Sep 18 2015 11:25PM', 100) AS date2;

您的第一种时间戳似乎适用于掩码121,而第二种时间戳适用于掩码100。下面的演示链接显示了转换的有效性。

Demo

答案 1 :(得分:0)

GETDATE()是特定于SQL Server的,则可以使用try_convert()

select cast(try_convert(datetime2, col) as datetime)
from table t
where try_convert(datetime2, col) is not null;

但是,如果字符串日期与您提供的格式完全相同,则只需进行转换即可:

select cast(cast(col as datetime2) as datetime)
from table t;