Тестирование строки на наличие только цифр в SQL Server
Быстрый ответ
Для того, чтобы быстро установить, состоит ли строка только из цифр в SQL Server, используйте оператор LIKE
с паттерном '%[^0-9]%'
. Это поможет выявить любое присутствие не числовых символов. Вот пример базового использования:
DECLARE @TestString VARCHAR(100) = '12345'; -- Поменяйте на '123abc', чтобы проверить наличие букв.
IF @TestString NOT LIKE '%[^0-9]%'
PRINT 'Только цифры'; -- По аналогии с математическим учебником для начальной школы!
ELSE
PRINT 'Содержит не только цифры'; -- Нечто в роде числа Пи, но с буквами.
С помощью этого условия мы проверяем, содержит ли @TestString
что-либо подобное цифрам, используя паттерн [^0-9]
, который требуется в случае наличия в строке других символов.
Глубокое погружение: что стоит за проверкой символов
Проблемы с ISNUMERIC
Вначале может показаться, что ISNUMERIC
идеально подходит для исследования, но функция может обмануть нас. Она считает числами строки с валютными обозначениями, плюсами +
, минусами -
и точками (используемыми как десятичные разделители). Это приводит к ложноположительным срабатываниям. Пример:
SELECT ISNUMERIC('$123'), ISNUMERIC('-123'), ISNUMERIC('123.45');
-- Результат: 1, 1, 1 (Итак, что-то здесь не так!)
Это не подходит под наши условия, так как мы ищем строки, представляющие собой только цифры.
Настройка обработки пустых строк и пробелов: добавление точности
Использование NOT LIKE
совместно с проверкой на пустую строку и пробелы поможет уточнить результаты. Это как помощник Бэтмена, который приходит нам на помощь:
IF LEN(@TestString) > 0 AND @TestString NOT LIKE '%[^0-9]%' AND @TestString NOT LIKE '%[ ]%'
PRINT 'Только цифры и нет пробелов'; -- Как книга, где лишь номера страниц.
ELSE
PRINT 'Есть и другие символы или пробелы'; -- Это добавляет загадочности.
Такой подход исключает редкие случаи, когда строки могут остаться не замеченными.
Визуализация
Представьте себя великим наблюдателем в духе Шерлока Холмса (SQL-запрос), который находится на тропе злодея (строка), у которого вместо пальцев только цифры (строка из цифр). Ваша задача:
IF ЗЛОДЕЙ IS_DIGIT() = TRUE, Шерлок заявляет: "Элементарно, Ватсон! 🚨"
ELSE "Игра не закончена! 🕵️♂️ Продолжаем искать."
Перефразируем это в терминах T-SQL:
SELECT CASE WHEN SUSPECT NOT LIKE '%[^0-9]%' THEN '🚨 Элементарно, все цифры на месте!'
ELSE '🕵️♂️ Обнаружены нецифровые символы. Игра продолжается.' END
Продвинутые методы: запросы на высоте с помощью альтернативных инструментов
Изучение PATINDEX
Не только LIKE
может стать вашим парнером в поисках, также существует PATINDEX
. Вот демонстрация его использования:
IF PATINDEX('%[^0-9]%', @TestString) = 0
PRINT 'Только цифры'; -- Разрешили тайну числовой последовательности!
ELSE
PRINT 'Обнаружены также и другие символы'; -- Вернемся к расследованию, мой дорогой Ватсон!
Изощренность T-SQL: запросы с использованием шаблонов
С помощью T-SQL возможна проведение детальной проверки по шаблону, что позволяет:
SELECT IIF(SUM(CASE WHEN SUBSTRING(@TestString, v.number, 1) LIKE '[0-9]' THEN 0 ELSE 1 END) = 0,
'Только цифры',
'Содержит также и другие символы')
FROM master.dbo.spt_values v
WHERE v.type = 'P' AND v.number BETWEEN 1 AND LEN(@TestString);
-- Когда необходимо до конца проверить каждый элемент, мы не согласимся с приближенными результатами.
Любопытный момент этого подхода в том, что он использует системную таблицу для буквального анализа строки.
Числа и культурный контекст: иллюзия простоты
В разных культурах числа могут быть представлены по-разному, с использованием точки (.) или запятой (,) в роли десятичного или тысячного разделителей. При проверке на "только цифры" такие символы следует признавать нарушителями порядка, так же как и все остальные нецифровые символы.
Полезные материалы
- PATINDEX (Transact-SQL) – SQL Server | Microsoft Learn — основной справочник для изучения
PATINDEX
. - Java String – See if a string contains only numbers and not letters – Stack Overflow — обсуждения о проверке на числа в мире Java.
- SQL Server: LIKE Condition — полное описание использования
LIKE
. - PowerShell and ADO.NET Connection String Settings for SQL Server — исследуйте возможности DataTable.
- SQL Tutorial — надежный помощник в мире SQL.