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