2009-09-02 22 views
0

我只是想知道是否有人知道如何选择指定列将出现投射问题的行。从SQL服务器中选择发生投射问题的行

即。

SELECT * FROM ThisTable吨

WHERE 0 <>(选择铸造(t.value如 日期时间))

'选择流延(如t.value日期时间)' 将理想情况下返回@@ error 的结果以指示发生了投射问题。

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

干杯

回答

2
SELECT * FROM ThisTable t 

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

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

+0

哈哈耶一个同事过来了20分钟后,把它从他的窍门中拉出来......甚至不知道isdate是否存在!去显示你每天学习新的东西;) 谢谢你的回应:) – user155548 2009-09-03 00:25:22

1

我也一直在寻找一个解决方案在SQL服务器转换为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。