ПОПРОБУЙТЕ ЛОВУТЬ В КОНВЕРТ - PullRequest
18 голосов
/ 28 мая 2009

Можно ли использовать блоки TRY CATCH в SQL-выборках?

Для материала, подобного этому, например:

select 
   order, 
   CONVERT(DATETIME, orderDate)
from orders

Как лучше всего справиться с этим сценарием?

Ответы [ 5 ]

22 голосов
/ 28 мая 2009

Я не знаю о try-catch, но в SQL Server у вас есть функция ISDATE, и вы можете сделать что-то вроде

CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DateTime, orderDate) ELSE GETDATE() END
12 голосов
/ 16 августа 2012

В 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 голосов
/ 28 мая 2009

В самом предложении SELECT нет.

Можно проверить дату, используя ISDATE ()

select 
   order, 
   CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DATETIME, orderDate) ELSE NULL END
from orders
1 голос
/ 28 мая 2009

Я не думаю, что попытка перехвата возможна внутри выбора, но снаружи возможна при работе с хранимыми процедурами.

begin try
    select cast(strartnr as int) from table
end try
begin catch 
    select 10000 from table
end catch
1 голос
/ 28 мая 2009

Вы можете использовать функцию ISDATE ():

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