在Select语句中的CONVERT上尝试捕获

时间:2009-05-28 13:13:04

标签: sql tsql datetime try-catch

是否可以在SQL选择中使用TRY CATCH块?

对于类似的东西,例如:

select 
   order, 
   CONVERT(DATETIME, orderDate)
from orders

处理这种情况的最佳方法是什么?

5 个答案:

答案 0 :(得分:22)

我不知道try-catch,但是在SQL Server中你有ISDATE函数,可以用来做类似的事情

CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DateTime, orderDate) ELSE GETDATE() END

答案 1 :(得分:12)

在MS SQL Server 2012中,有一个新的构造可以完全满足要求:


SELECT 
    CASE WHEN TRY_CONVERT(float, 'test') IS NULL 
    THEN 'Cast failed'
    ELSE 'Cast succeeded'
END AS Result;
    GO

另见http://msdn.microsoft.com/en-us/library/hh230993.aspx

答案 2 :(得分:2)

在SELECT子句本身中,没有。

您可以使用ISDATE()

测试日期
select 
   order, 
   CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DATETIME, orderDate) ELSE NULL END
from orders

答案 3 :(得分:1)

您可以使用ISDATE()函数:

SELECT ISDATE('11/13/2009')
SELECT ISDATE('13/11/2009')

答案 4 :(得分:1)

我不认为在select中可以尝试catch,但是在使用存储过程时可以使用外部。

begin try
    select cast(strartnr as int) from table
end try
begin catch 
    select 10000 from table
end catch