我有300.000行表;其中一列是varchar()但它确实包含日期xx / xx / xxxx或x / x / xxxx或类似的。但执行以下测试会产生错误:
SELECT CAST(MyDate as Datetime) FROM MyTable
问题是它没有告诉我哪一行......
我已经通过试验错误执行了一系列“手动”更新,并执行了简单的更新来修复这些更新,但必须要删除或修复一些奇怪的值。
例如,我执行了一项修复了大约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%’)
这修复了很多奇怪的行,其日期类似于01/01/0003等。 (日期范围从1998年到2010年)。
但是,我想知道哪些行在上面的选择中失败了。
打印这些内容的最佳方法是什么,以便我可以删除它们,编辑它们或查看该怎么做?感谢。
答案 0 :(得分:20)
SELECT
*
FROM
MyTable
WHERE
ISDATE(MyDate) = 0
答案 1 :(得分:4)
您是否尝试过ISDATE
功能?
答案 2 :(得分:1)
小心IsDate。我在一张数千人的桌子上有1条不良记录。它说8201-11-30是一个有效的日期。 IsDate应该有YEAR限制。
答案 3 :(得分:1)
ISDATE似乎并不总是有效。
以下在SQL Server 2008 R2中返回1
Select ISDATE('04- December 20')
但是尝试将相同的值转换为日期将失败。
Select cast('04- December 20' as date)
从字符串转换日期和/或时间时转换失败。