SQL Оператор CASE должен обрабатывать текст - PullRequest
0 голосов
/ 24 февраля 2020

Извиняюсь, если об этом спрашивали раньше - я потратил пару часов на поиск, но не нашел ничего, что помогло.

Это довольно просто - меня попросили создать запрос, который включает поле, которое при настройке (не мной) было создано как VARCHAR вместо INT.

Мне нужно сделать некоторые вычисления в этом поле, однако некоторые пользователи вводят текст в него, поэтому вычисления терпят неудачу, так как не могут преобразовать данные в INT.

Могу ли я добавить что-либо в оператор CASE для обработки текста?

Я думал что-то вроде следующего, но не знаю, что на самом деле код:

CASE
    WHEN [Field1] IS TEXT THEN 1 ;
    ELSE [Field2] as [Chose name]
END

Редактировать: Обратите внимание, что это на сервере MS SQL. Спасибо.

Ответы [ 2 ]

3 голосов
/ 24 февраля 2020

На SQL сервере вы можете использовать try_convert() и isnull() для этого:

isnull(try_convert(int, field), 1)

try_convert() попыток приведения field к int. Когда это не удается, возвращается null; вы можете перехватить это с помощью isnull() и вместо этого превратить в 1.

Обратите внимание, что это работает только до тех пор, пока field не равно null (в противном случае вы получите 1 как результат).

0 голосов
/ 24 февраля 2020

В SQL Сервер

Declare @Salary varchar(100);                                
Set @Salary = 50000;                                       
Select Case when ISNUMERIC(@Salary) = 1 then 1 
            else 0 end as [Check]

Может быть, это будет полезно.

...