Выделение русских символов и фильтрация телефонных номеров Борзя в SQL-запросах

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

В современных информационных системах часто возникает задача извлечь из массива данных только те записи, которые содержат русские символы. Это может понадобиться при работе с телефонными номерами, адресами, названиями организаций и т.д. В данной статье мы рассмотрим практический пример – выделение всех номеров, относящихся к городу Борзя (Забайкальский край), а также общие методы фильтрации русских символов в SQL‑запросах, использовании регулярных выражений и настройке поисковых систем.


Кратко о городе Борзя и его телефонной нумерации

Борзя – town в Забайкальском крае России. Телефонные номера этого региона начинаются с кода +7 -0241 (или 8 30241 при внутригородском наборе). Пример полного номера:

  • +7 -0241 2‑12‑34
  • 8 30241 5‑56‑78

Если в базе данных хранятся номера самых разных регионов, то для выделения именно «борзянской» части достаточно отфильтровать записи по префиксу 30241. Однако часто требуется не только проверять числовой префикс, но и убедиться, что accompanying текстовые поля (например, комментарии, названия контрагентов) содержат русские буквы. Ниже описаны способы такой фильтрации.

Почему обычный LIKE может не работать с русскими символами

Многие разработчики сталкиваются с тем, что запрос вида

SELECT * FROM table WHERE column LIKE '%А%';

возвращает не только русскую букву «А», но и латинскую «A», либо вовсе не находит нужные записи. Причина – в используемой коллации и в том, что диапазон A‑Z в шаблоне LIKE охватывает только латинские символы.

Для корректной работы необходимо явно указать диапазон Unicode‑кодов русских букв или воспользоваться подходящей коллацией.

Выделение русских символов: диапазоны Unicode

Кириллица в Unicode расположена в блоках:

  • Основная кириллица: U+0400 – U+04FF
  • Кириллица‑дополнение: U+0500 – U+052F

Следовательно, диапазон русских букв (включая Ё/ё) можно описать как:

  • U+0401 (Ё) и U+0451 (ё)
  • U+0410–U+042F (А‑Я)
  • U+0430–U+044F (а‑я)

В SQL‑диалектах, поддерживающих регулярные выражения (например, MySQL 8.0+, PostgreSQL, Oracle), можно использовать такой шаблон:

WHERE column REGEXP '[ЁёА-Яа-я]'

Если REGEXP недоступен, многие СУБД позволяют сравнивать по коду символа:

WHERE UNICODE(SUBSTRING(column, n, 1)) BETWEEN 1040 AND 1103 -- А‑Я и а‑я
 OR UNICODE(SUBSTRING(column, n, 1)) IN (1025, 1105) -- Ё, ё

Примеры запросов для выделения «борзянской» части номеров

MySQL (с REGEXP)

SELECT *
FROM phone_numbers
WHERE number LIKE '+7 -0241%' -- числовой префикс Борзя
 AND comment REGEXP '[ЁёА-Яа-я]'; -- наличие хотя бы одного русского символа в комментарии

PostgreSQL (с SIMILAR TO или ~)

SELECT *
FROM phone_numbers
WHERE number LIKE '+7 -0241%'
 AND comment ~ '[ЁёА-Яа-я]';

SQL Server (с использованием COLLATE и PATINDEX)

SELECT *
FROM phone_numbers
WHERE number LIKE '+7 -0241%'
 AND PATINDEX('%[ЁёА-Яа-я]%' COLLATE Cyrillic_General_CS_AS, comment) > 0;

Oracle (с REGEXP_LIKE)

SELECT *
FROM phone_numbers
WHERE number LIKE '+7 -0241%'
 AND REGEXP_LIKE(comment, '[ЁёА-Яа-я]');

Во всех примерах первым условием отбирается нужный телефонный префикс, а вторым – наличие русского символа в произвольном текстовом поле (комментарий, ФИО и т.д.). Это позволяет получить именно «борзянскую часть всех номеров», сопровождаемую русскоязычной информацией.

Альтернативные подходы: использование WeTransfer

Помимо работы с базами данных

Если в базе хранится большое количество записей, полезно создать индекс по выражению, которое проверяет наличие кириллицы. Например, в PostgreSQL можно использовать функциональный индекс:

CREATE INDEX idx_phone_comment_cyrillic
ON phone_numbers ((comment ~ '[ЁёА-Яа-я]'));

Такой индекс ускорит фильтрацию без полного сканирования таблицы.

Рекомендации по работе с поисковыми системами и фильтрацией контента

Если задача состоит в том, чтобы исключить русскоязычные результаты из поиска (или, наоборот, оставить только их), полезно знать следующие приёмы:

  • В Google можно добавить параметр lr=lang_ru для ограничения результатов русскоязычными страницами.
  • Для исключения русского контента используют -lang:ru или указывают регион, где русский язык не predominates.
  • В Яндексе аналогично работает параметр &lr=213 (русский язык) и исключение через минус.

Эти техники полезны, когда необходимо анализировать только англоязычные источники, как показано в фрагменте из предоставленного интернет‑контента.

Выделение «борзянской части всех номеров» – это комбинация двух простых условий:

  1. Фильтрация по телефонному префиксу +7 -0241 (или код региона
  2. Проверка наличия русских символов) сопутствующих полный номер начинается с +7 -0241;
  3. Убедиться, что связанные текстовые поля содержат хотя бы один русский символ, используя диапазоны Unicode, регулярные выражения или подходящую коллацию.

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

Помните: правильный выбор колляции и использование Unicode‑диапазонов гарантируют, что ваш запрос будет работать независимо от настроек сервера и не будет «пропускать» латинские аналоги кириллических букв.