从sql server中选择发生转换问题的行

时间:2009-09-02 06:01:14

标签: sql sql-server sql-server-2005 casting types

我只是想知道是否有人知道如何选择指定列将在投射问题下的行。

  

SELECT * FROM ThisTable t

     

WHERE 0<> (选择演员表(t.value as   datetime))

'select cast(t.value as datetime)'理想情况下会返回@@ error的结果 表示已发生铸造问题。

有没有人有任何想法,因为我的血腥难过。

干杯

2 个答案:

答案 0 :(得分:2)

SELECT * FROM ThisTable t

WHERE ISDATE(t.value) = 1 -- or 0 for NOT a datetime valaue

ISDATE是你的朋友,如果我理解正确的话......

答案 1 :(得分:1)

我还在寻找一种解决方案,以避免在SQL Server中将varchar转换为datetime时出现错误。

我有一个varchar列包含日期不一致的条目,如DD.MM.YYYY或MM.YYYY。通过简单的强制转换,查询只能在遇到具有前一种格式的记录时才能正常工作,从而导致转换错误并中断查询。使用你的建议,我可以很容易地捕获MM.YYYY值并将它们设置为null,这正是我想要的。

SELECT CASE WHEN ISDATE(contract_date) = 1 
            THEN CAST(contract_date AS datetime)
            ELSE NULL
       END converted_dates
FROM contracts

“01.01.2009”成功转换为“01.01.2009 00:00:00”,而“01.2009”返回为NULL。