Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Тестирование строки на наличие только цифр в SQL Server

Быстрый ответ

Для того, чтобы быстро установить, состоит ли строка только из цифр в SQL Server, используйте оператор LIKE с паттерном '%[^0-9]%'. Это поможет выявить любое присутствие не числовых символов. Вот пример базового использования:

SQL
Скопировать код
DECLARE @TestString VARCHAR(100) = '12345'; -- Поменяйте на '123abc', чтобы проверить наличие букв.
IF @TestString NOT LIKE '%[^0-9]%'
    PRINT 'Только цифры'; -- По аналогии с математическим учебником для начальной школы!
ELSE
    PRINT 'Содержит не только цифры'; -- Нечто в роде числа Пи, но с буквами.

С помощью этого условия мы проверяем, содержит ли @TestString что-либо подобное цифрам, используя паттерн [^0-9], который требуется в случае наличия в строке других символов.

Кинга Идем в IT: пошаговый план для смены профессии

Глубокое погружение: что стоит за проверкой символов

Проблемы с ISNUMERIC

Вначале может показаться, что ISNUMERIC идеально подходит для исследования, но функция может обмануть нас. Она считает числами строки с валютными обозначениями, плюсами +, минусами - и точками (используемыми как десятичные разделители). Это приводит к ложноположительным срабатываниям. Пример:

SQL
Скопировать код
SELECT ISNUMERIC('$123'), ISNUMERIC('-123'), ISNUMERIC('123.45');
-- Результат: 1, 1, 1 (Итак, что-то здесь не так!)

Это не подходит под наши условия, так как мы ищем строки, представляющие собой только цифры.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Настройка обработки пустых строк и пробелов: добавление точности

Использование NOT LIKE совместно с проверкой на пустую строку и пробелы поможет уточнить результаты. Это как помощник Бэтмена, который приходит нам на помощь:

SQL
Скопировать код
IF LEN(@TestString) > 0 AND @TestString NOT LIKE '%[^0-9]%' AND @TestString NOT LIKE '%[ ]%'
    PRINT 'Только цифры и нет пробелов'; -- Как книга, где лишь номера страниц.
ELSE
    PRINT 'Есть и другие символы или пробелы'; -- Это добавляет загадочности.

Такой подход исключает редкие случаи, когда строки могут остаться не замеченными.

Визуализация

Представьте себя великим наблюдателем в духе Шерлока Холмса (SQL-запрос), который находится на тропе злодея (строка), у которого вместо пальцев только цифры (строка из цифр). Ваша задача:

SQL
Скопировать код
IF ЗЛОДЕЙ IS_DIGIT() = TRUE, Шерлок заявляет: "Элементарно, Ватсон! 🚨"
ELSE "Игра не закончена! 🕵️‍♂️ Продолжаем искать."

Перефразируем это в терминах T-SQL:

SQL
Скопировать код
SELECT CASE WHEN SUSPECT NOT LIKE '%[^0-9]%' THEN '🚨 Элементарно, все цифры на месте!' 
            ELSE '🕵️‍♂️ Обнаружены нецифровые символы. Игра продолжается.' END

Продвинутые методы: запросы на высоте с помощью альтернативных инструментов

Изучение PATINDEX

Не только LIKE может стать вашим парнером в поисках, также существует PATINDEX. Вот демонстрация его использования:

SQL
Скопировать код
IF PATINDEX('%[^0-9]%', @TestString) = 0
    PRINT 'Только цифры'; -- Разрешили тайну числовой последовательности!
ELSE
    PRINT 'Обнаружены также и другие символы'; -- Вернемся к расследованию, мой дорогой Ватсон!

Изощренность T-SQL: запросы с использованием шаблонов

С помощью T-SQL возможна проведение детальной проверки по шаблону, что позволяет:

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);
-- Когда необходимо до конца проверить каждый элемент, мы не согласимся с приближенными результатами.

Любопытный момент этого подхода в том, что он использует системную таблицу для буквального анализа строки.

Числа и культурный контекст: иллюзия простоты

В разных культурах числа могут быть представлены по-разному, с использованием точки (.) или запятой (,) в роли десятичного или тысячного разделителей. При проверке на "только цифры" такие символы следует признавать нарушителями порядка, так же как и все остальные нецифровые символы.

Полезные материалы

  1. PATINDEX (Transact-SQL) – SQL Server | Microsoft Learnосновной справочник для изучения PATINDEX.
  2. Java String – See if a string contains only numbers and not letters – Stack Overflow — обсуждения о проверке на числа в мире Java.
  3. SQL Server: LIKE Condition — полное описание использования LIKE.
  4. PowerShell and ADO.NET Connection String Settings for SQL Server — исследуйте возможности DataTable.
  5. SQL Tutorial — надежный помощник в мире SQL.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой оператор используется для проверки строки на наличие только цифр в SQL Server?
1 / 5