在SQL Server 2008中查找无效日期

Mar*_*ini 8 date sql-server-2008

我有300.000行表; 其中一列是varchar()但它确实包含日期xx/xx/xxxx或x/x/xxxx或类似的.但执行以下测试会产生错误:

SELECT CAST(MyDate as Datetime) FROM MyTable
Run Code Online (Sandbox Code Playgroud)

问题是它没有告诉我哪一行......

我通过试验错误执行了一系列"手动"更新并执行了简单的更新来修复这些更新,但必须有一些奇怪的值需要删除或修复.

例如,我执行了一个修复了大约40行的简单测试:

UPDATE MyTable SET MyDate = REPLACE(MyDate, '/000','/200') FROM MyTable WHERE MyDate like ('%/000%’)
UPDATE MyTable SET MyDate = REPLACE(MyDate, '/190','/199') FROM MyTable WHERE MyDate like ('%/190%’)
Run Code Online (Sandbox Code Playgroud)

这修复了很多奇怪的行,其日期类似于01/01/0003等.(日期范围从1998年到2010年).

但是,我想知道上面的选择中哪些行失败了.

什么是最好的打印方式,所以我可以删除它们,编辑它们或看看该怎么做?谢谢.

Rob*_*Day 22

SELECT
    *
FROM
   MyTable
WHERE
    ISDATE(MyDate) = 0
Run Code Online (Sandbox Code Playgroud)