Ответ 1
Я не знаю о try-catch, но в SQL Server у вас есть функция ISDATE и вы можете сделать что-то вроде
CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DateTime, orderDate) ELSE GETDATE() END
Можно ли использовать TRY CATCH-блоки в SQL Selects?
Для вещей, подобных этому, например:
select
order,
CONVERT(DATETIME, orderDate)
from orders
Каков наилучший способ обработки этого сценария?
Я не знаю о try-catch, но в SQL Server у вас есть функция ISDATE и вы можете сделать что-то вроде
CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DateTime, orderDate) ELSE GETDATE() END
В 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
В самом предложении SELECT нет.
Вы можете проверить дату, используя ISDATE()
select
order,
CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DATETIME, orderDate) ELSE NULL END
from orders
Вы можете использовать функцию ISDATE():
SELECT ISDATE('11/13/2009')
SELECT ISDATE('13/11/2009')
Я не думаю, что попытка try catch возможна внутри select, но снаружи возможно, когда вы работаете с хранимыми процедурами.
begin try
select cast(strartnr as int) from table
end try
begin catch
select 10000 from table
end catch