Операторы ~
и SIMILAR TO
в PostgreSQL используются для выполнения операций поиска по регулярным выражениям, но есть несколько ключевых различий между ними.
Оператор ~
используется для поиска строк, соответствующих определенному регулярному выражению. Этот оператор не входит в стандарт языка SQL и является специфичным для PostgreSQL. Он более гибкий и мощный, чем SIMILAR TO
, так как поддерживает более широкий набор функциональных возможностей регулярных выражений.
Примеры использования оператора ~:
-- Найти все имена, начинающиеся с буквы "A"
SELECT * FROM users WHERE name ~ '^A';
-- Найти имена, содержащие две буквы "o" подряд
SELECT * FROM users WHERE name ~ 'o{2}';
-- Найти имена, начинающиеся с буквы "a" или "A", игнорируя регистр
SELECT * FROM users WHERE name ~* '^a';
-- Найти все имена, начинающиеся с букв от "A" до "F"
SELECT * FROM users WHERE name ~ '^[A-F]';
Оператор SIMILAR TO используется для поиска строк, соответствующих шаблону, который напоминает регулярное выражение, но с более ограниченным набором функций. Он обычно используется для простых сценариев сопоставления шаблонов.
Пример использования оператора SIMILAR TO:
-- Найти все имена, начинающиеся с буквы "A"
SELECT * FROM users WHERE name SIMILAR TO 'A%';
-- Найти имена, содержащие две буквы "o" подряд
SELECT * FROM users WHERE name SIMILAR TO '%o{2}%';
-- Найти имена, начинающиеся с буквы "a" или "A", игнорируя регистр
SELECT * FROM users WHERE name SIMILAR TO '(a|A)%';
-- Найти все имена, начинающиеся с букв от "A" до "F"
SELECT * FROM users WHERE name SIMILAR TO '[A-F]%';
-- Найти строки, содержащие слово "John"
SELECT * FROM users WHERE name SIMILAR TO '%\\yJohn\\y%';