在 SQL 中将非标准美国日期时间字符串转换为日期时间



我有一个数据集,其日期格式如下:

10/18/2007   8:00 A.M.
10/20/2007  10:00 A.M.

等。。

我在寻找一致的查询来将一组这种格式的 varchar 转换为日期时间以插入到日期时间列时时遇到了很多麻烦。 我已经尝试了许多转换样式(https://learn.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql 在这里找到(,但没有一种真正有效。

在 Sql Server 2012 及更高版本中:当转换失败时,每个都将返回null而不是错误。

  • try_convert(datatype,val)
  • try_cast(val as datatype)
  • try_parse(val as datatype [using culture])

declare @str varchar(32) = '10/20/2007  10:00 A.M.'
select try_parse(replace(@str,'.M.','M') as datetime using 'EN-us')

返回: 2007-10-20 10:00:00

Rextester 演示:http://rextester.com/KWCF9843

你只需要去掉句点,然后简单地转换

Select try_convert(datetime,replace('10/18/2007  8:00 A.M.','.',''))

返回

2007-10-18 08:00:00.000

最新更新