Как стать автором
Обновить

Комментарии 11

В далеких нулевых я для этого писал библиотеку на Java. Oracle прекрасно работает с jar-файлами

# создаем JAR-файл в Java
jar cvf MyJavaLib.jar MyJavaLib.class

# загружаем Java-класс в базу данных Oracle
loadjava -user username/password@db -resolve MyJavaLib.jar

# создаем функциюis_even в Oracle, которая использует Java
CREATE OR REPLACE FUNCTION is_even(number IN NUMBER) RETURN BOOLEAN AS LANGUAGE JAVA NAME 'MyJavaLib.isEven(I)';

# пользуемся
SELECT * FROM my_table WHERE is_even(my_column) = TRUE;

Нюансы синтаксиса
Обратите внимание на различия в экранировании символов и использовании спец. последовательностей: ...
Пример: ...

В примере вообще нет слэшей, не используется экранирование или специальные последовательности. Похоже при редактировании \ потерялись?

Спасибо за замечание! Вы правы, слэши потерялись в примере. Сейчас исправлю.

а similar_to почему не упоминаете? это же тоже регулярка

Спасибо за комментарий! Вы правы, SIMILAR TO — тоже регулярка. Добавлю про него в статью к вечеру. Спасибо, что подсказали!

так то и LIKE это регулярка.. потому что все тот же pattern matching, хоть и ограниченный по возможностям

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

Допустим, есть таблица users с полем email, и есть подозрение, что не все адреса введены корректно. Нужно выбрать все записи, где email не соответствует стандартному формату.

Типичная ошибка тех, кто бездумно переписывает у соседа, не озаботившись проверить переписанное на истинность. А списанное - оно неправильное, неверное. Вы хоть стандарт-то читали?

Валидация e-mail - это крайне сложная тема, и при реализации в соответствии со всеми требованиями стандарта получается паттерн длиной более 10 килобайт. А если не потратить кучу времени на оптимизацию - то намного более...

Стандартизация номеров телефонов

И опять та же история. Копипаст без понимания и проверки. Объяснения - только ухудшают ситуацию. Потому что они либо ошибочны, либо написаны для весьма частного, специфического набора данных.

Основные функции для работы с регулярными выражениями в SQL

Обожаю подобные статьи, такие чтобы тап-тап-тап в корпоративный блог. Потому что если мы говорим о стандарте SQL99 это одно, если о конкретной реализации это другое. Догадайся, читатель сам, что большинство написанного справедливо, к примеру, для ORACLE и их же MySQL, но в том же подмножестве TSQL ничего подобного нет, там (из коробки) отношение к пользователю "PATINDEX или ну да, ну да.. пошел я нахер"

Я не прям чтоб спец по регуляркам и когда попытался разобрать то что написано в самом начале, то возник вопрос:

^+?7?\d{10}$ — выбираем номера, которые уже могут начинаться с +7 или 7, чтобы избежать дублей кода страны.

Разве оно не зацепит телефоны и с +7 и, например, с +5?
Типа, у нас может быть один + и одна 7, а может и не быть. В итоге пройдет как +71234567890, так и +5123456789

Нигде не упомянут Clickhouse. Вот вам процессор шаблонов на SQL:

    replaceRegexpAll(replaceRegexpAll(arrayStringConcat(
        arrayMap(x -> if(has(mapKeys(subst), x), subst[x], x ),
              splitByRegexp('[@]', P.v))),                          -- delimiter chars set here
                '((/\\*([^*]|[\r\n]|(\\*+([^*/]|[\r\n])))*\\*+/)|(--.*))', ''), '([\r\n]+)',
                     ' ')     

делает замены @xxx@ переменных, убирает комментарии и переводы строк.
Написано много лет назад, руками, без ChatGPT

Зарегистрируйтесь на Хабре, чтобы оставить комментарий