SQL Server: как проверить, имеет ли строка только цифры

Вопрос:Я работаю в SQL Server 2008. Я пытаюсь проверить, имеет ли строка (varchar) только цифры (0-9). Я знаю, что функция IS_NUMERIC может давать ложные результаты. (Мои данные могут иметь знаки $, которые не должны проходить тест.) Итак, я избегаю этой функции. У меня уже есть тест, чтобы увидеть, имеет ли строка какие-либо нецифровые символы, т.е.

Вопрос:

Я работаю в SQL Server 2008. Я пытаюсь проверить, имеет ли строка (varchar) только цифры (0-9). Я знаю, что функция IS_NUMERIC может давать ложные результаты. (Мои данные могут иметь знаки $, которые не должны проходить тест.) Итак, я избегаю этой функции.

У меня уже есть тест, чтобы увидеть, имеет ли строка какие-либо нецифровые символы, т.е.

some_column LIKE ‘%[^0123456789]%’

Я бы подумал, что тест с единственными цифрами будет чем-то подобным, но я рисую пробел. Любые идеи?

Лучший ответ:

Используйте Not Like

where some_column NOT LIKE ‘%[^0-9]%’

Demo

declare @str varchar(50)=’50’—‘asdarew345’ select 1 where @str NOT LIKE ‘%[^0-9]%’ Ответ №1

Существует системная функция ISNUMERIC для SQL 2008 и выше. Пример:

SELECT myCol FROM mTable WHERE ISNUMERIC(myCol)<> 1;

Я сделал несколько быстрых тестов, а также посмотрел дальше в документы:

ISNUMERIC returns 1 when the input expression evaluates to a valid numeric data type; otherwise it returns 0.

Это означает, что он достаточно предсказуем, например,

-9879210433 будет проходить, но 987921-0433 не будет.
$9879210433 будет проходить, но 9879210$433 не делает.

Таким образом, используя эту информацию, вы можете избавиться на основе списка допустимых символов валюты и + и — символов.

Ответ №2

Решение: where some_column NOT LIKE ‘%[^0-9]%’ является правильным.

Только одно важное замечание: добавьте проверку, когда строка column = » (пустая строка). Этот сценарий вернет, что » является допустимым числом.

Ответ №3DECLARE @x int=1 declare @exit bit=1 WHILE @x<=len(‘123c’) AND @exit=1 BEGIN IF ascii(SUBSTRING(‘123c’,@x,1)) BETWEEN 48 AND 57 BEGIN set @x=@x+1 END ELSE BEGIN SET @exit=0 PRINT ‘string is not all numeric -:(‘ END END

Оцените статью
Добавить комментарий