suneel kumar gupta Ответов: 2

Проверка целочисленного значения на сервере sqll


У меня есть таблица в которой столбец допускает либо нулевое значение либо целочисленное значение я хочу проверить это с помощью оператора case в sql как показано ниже---

это не правильный запрос, но я пробовал что-то вроде этого

объявить @PSL_COUNT int=1.6
выберите случай, когда @PSL_COUNT имеет значение null или @PSL_COUNT не как '%[^0-9]%', тогда 0, иначе конец 72

@PSL_COUNT int=1.6 недопустимый int
@PSL_COUNT int=1----100----n допустимый int
@PSL_COUNT int=" // пустые данные недопустимы int


Я хочу проверить, является ли @PSL_COUNT допустимым int, а затем вернуть 0 else return 72 (validation id)

Что я уже пробовал:

объявить @PSL_COUNT int=1.6
выберите случай, когда @PSL_COUNT имеет значение null или @PSL_COUNT не как '%[^0-9]%', тогда 0, иначе конец 72

2 Ответов

Рейтинг:
1

MadMyche

Вы можете использовать TRY_CONVERT метод в Sql Server для проверки того, является ли один тип преобразуемый до другого

МС документы: TRY_CONVERT[^]

Основываясь как на вашем, так и на их примере кода

DECLARE @PSL_COUNT NVARCHAR(16) = '1.6'

SELECT
  Result = CASE
    WHEN TRY_CONVERT(INT , @PSL_COUNT) IS NULL   THEN 0
    ELSE                                              72
  END


Я проверил это со значениями NULL, 1, 1.0 и 1.6.
Test  Result
----  ------
NULL  0
1     72
1.0   0
1.6   0
abcd  0


Рейтинг:
0

OriginalGriff

Так много ошибок...

Поля INT не содержат значений с плавающей запятой: 1.6 - это значение с плавающей запятой, поэтому оно будет усечено до 1

Например, для строк, а не для чисел.

Значения INT (и FLOAT) не могут содержать нечисловых символов, поэтому попытка проверить их не будет работать...

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