查询无法转换为日期时间的数据列

jon*_*aze 3 datetime type-conversion sql-server-2008

我有一个较旧的表,其中一个datetime列被构建为a,varchar并且在此表中插入数据的表单是自由形式的,没有验证/限制.我已经更正了表格,现在我正在设定规范化数据的任务.我需要查询此列以查找不能CAST作为的所有记录datetime

例子:

9/30/2008
9/30/13
august 2010
5/11
30SEP12
31-Mar-2011
2005
Run Code Online (Sandbox Code Playgroud)

我已经清理了N/A数据,NULL但不确定是否能够获得所有不被视为有效日期的有效方法.任何提示或技巧或我将不得不通过记录记录将此列转换为datetime数据类型?

Lit*_*les 6

您可以ISDATE用来确定不是日期的记录:

SELECT *
FROM YourTable
WHERE isdate(OldDateField) = 0
Run Code Online (Sandbox Code Playgroud)

您可以使用以下查询查看哪些不是日期:

SELECT isdate('9/30/2008')
SELECT isdate('9/30/13')
SELECT isdate('august 2010')
SELECT isdate('5/11')
SELECT isdate('30SEP12')
SELECT isdate('31-Mar-2011 2005')
Run Code Online (Sandbox Code Playgroud)

  • 这种方法只有一个问题 - 如果你遇到像`05/06/2011`这样的日期,`ISDATE()`将返回true,但你怎么知道用户是在5月6日还是6月5日? (2认同)