从带有潜在错误日期字符串的大记录 table 将 nvarchar 转换为 datetime

Convert from nvarchar to datetime from a large record table with potentially bad date strings

我有一个名为 Cases 的主 table,我正在向其中插入数据。我有一个替代方案 table,其中存储了所有名为 rawTableData 的原始数据,然后将其发送到主 table.

我的 rawTableData 中有一个 nvarchar 列以这种格式存储日期时间字符串

2016-04-04-10.50.02.351232

我的 Cases table 中有一列的数据类型为 DATETIME.

我首先尝试在下面的这个方法中找到坏数据

SELECT CONVERT(datetime, nvarcharDateColumn, 103)
FROM rawTableData
WHERE ISDATE(CONVERT(datetime, nvarcharDateColumn, 103)) != 1

我得到以下错误

The conversion of nvarchar data type to a datetime data type resulted in an out-of-range value.

然后我尝试了一种不同的方法,希望找到所有超出范围的值

SELECT nvarcharDateColumn
FROM rawTableData
WHERE ISDATE(nvarcharDateColumn)

但是只有 returns 自其 nvarchar 以来的所有行。

再次,我继续尝试不同的方法

SELECT CONVERT(DATETIME, CASE WHEN ISDATE(nvarcharDateColumn) = 1 THEN nvarcharDateColumn END, 103)
FROM rawTableData

我不确定我在这里做错了什么,我们将不胜感激。

我正在使用 SQL Server 2012

您可以使用 TRY_CONVERT:

SELECT nvarchardatecolumn, TRY_CONVERT(date, nvarchardatecolumn)
FROM rawTableData

如果您只想 return 无效日期,请使用派生的 table:

SELECT *
FROM (SELECT nvarchardatecolumn, TRY_CONVERT(date, nvarchardatecolumn) DateCheck
      FROM rawTableData
     ) A
WHERE DateCheck IS NULL