2016-05-12 7 views
0
SELECT CASE WHEN ISNUMERIC('1a') =1 THEN 1 ELSE 'A' END 

i'am получение этой ошибки !!Sql ISNUMERIC()

Ошибка преобразования при преобразовании значения varchar 'A' в тип данных int.

ответ

1

вы являетесь жертвой типа данных precedence.Taken из BOL:

Когда оператор объединяет два выражения различных типов данных, правила для приоритета типа данных указывают, что тип данных с более низким приоритетом преобразуется в данные pe с более высоким приоритетом. Если преобразование не поддерживается неявным преобразованием, возвращается ошибка. Если оба выражения операнда имеют один и тот же тип данных, результат операции имеет такой тип данных

Так что в вашем случае CASE является выражением, и когда в этом выражении объединены два или более типа данных, он возвращает данные тип наивысшего приоритета. В вашем случае это INT..Но измените ваш запрос ниже

SELECT CASE WHEN ISNUMERIC('1a') =1 THEN cast(1 as varchar) ELSE 'A' END 
0
SELECT CASE WHEN ISNUMERIC('1a') =1 THEN 1 ELSE 2 END 
+0

Я хочу вернуть значение VARCHAR здесь ..! –

+0

ok Я покажу вам вариант –

0
SELECT CASE WHEN ISNUMERIC('1A') = 1 THEN '1' ELSE 'A' END 

ИЛИ

SELECT CASE WHEN ISNUMERIC('1A') =1 THEN '1' ELSE SUBSTRING('1A',2,2) END 
Смежные вопросы