2015-01-14 3 views
1

Я стараюсь, чтобы выполнить TRY_CAST в SQL Server 2005. запрос будет выглядеть следующим образом:Как выполнить TRY_CAST в SQL Server 2005?

SELECT TRY_CAST((select bla bla bla expression) as int) 

Выражение внутри try_cast может возвращать несколько строк или что-то, которые не могут быть преобразованы в INT, поэтому мне нужно это (очевидно :)). К сожалению, я написал свой большой запрос для SQL Server 2012, но теперь мне нужно использовать его на SQL Server 2005.

Есть ли обходной путь?

Спасибо!

+0

Вам нужно будет использовать TRY/CATCH и/или условные выражения, которые проверяют значение, прежде чем пытаться бросить его. Это не будет идеально, но вы можете вообще сказать, является ли число не целочисленным, потому что оно не соответствует ''^[0-9] '', длиннее определенного количества символов и т. Д. –

+1

Проверьте эту ссылку http://www.tek-tips.com/faqs.cfm?fid=6423 должен помочь вам –

ответ

1

В конце концов я решил с:

case when IsNumeric(Expression)=1 
    then cast(Expression as int) 
    else NULL 
end 
+2

К сожалению, 'ISNUMERIC' отвечает на другой вопрос, что вы думаете. Он не отвечает: «Могу ли я применить это выражение к целому?», Он отвечает «Могу ли я передать это выражение в * любой» числовых типов данных? (О, и мне все равно, какой из этих типов данных он может быть отброшено на "). Таким образом, вы обнаружите, что 'ISNUMERIC ('0d0')' равно '1', но вы полностью не сможете использовать' 0d0' для 'int'. –