从带有潜在错误日期字符串的大记录 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
我有一个名为 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