我只是想知道是否有人知道如何选择指定列将在投射问题下的行。
即
SELECT * FROM ThisTable t
WHERE 0<> (选择演员表(t.value as datetime))
'select cast(t.value as datetime)'理想情况下会返回@@ error的结果 表示已发生铸造问题。
有没有人有任何想法,因为我的血腥难过。
干杯
答案 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。