Оператор LIKE поради та хитрощі програмування - SQL програмування

Зміст

Користь пропозиції LIKE ґрунтується на підтримуваних ним узагальнюючих операторах. Пропозиція LIKE повертає булеве значення ІСТИНА, якщо при порівнянні виявляються збігаються значення.

Для функціонування пропозиції LIKE дуже важливою є чутливість до регістру конкретної СУБД. Наприклад, Microsoft SQL Server не враховує регістр за промовчанням (хоча його можна налаштувати відповідним чином). Таким чином, SQL Server буде вважати рядки DAD та dad однаковими. З іншого боку, платформа Oracle враховує регістр, і рядки DAD та dad тут будуть різними. Ось приклад, що дозволяє краще проілюструвати це положення.

Цей запит для Microsoft SQL Server витягне з таблиці authors записи, де прізвище (lname) має вигляд 'larson' або 'lars', хоча пошук запит визначено з використанням верхнього регістру ('LARS%'). У Oracle цей запит не знайде прізвищ 'Larson' або 'Lars', оскільки Oracle порівняє з урахуванням регістру.

Платформа DB2 підтримує синтаксис пропозиції LIKE стандарту ANSI SQL 2003. Підтримуються узагальнюючі символи % та знак підкреслення (_). Підтримуються послідовності, що відміняють.

Платформа DB2 враховує регістр, тому реалізація пропозиції LIKE повністю чутлива до регістру. Щоб значення в різних регістрах завжди порівнювалися без урахування регістру, потрібно використовувати функцію UPPER або TRANSLATE. Крім того, DB2 неявно перетворює кодову сторінку шаблону рядка або скасовує послідовність кодової сторінки виразу, якщо тільки вони не визначені з пропозицією FOR BIT DATA.

Платформа MySQL підтримує пропозиції LIKE синтаксис стандарту ANSI. Підтримуються узагальнюючі символи % та знакпідкреслення (_). Також підтримується пропозиція ESCAPE.

Крім того, MySQL підтримує спеціальні функції REGEXP та NOT RLIKE, що застосовуються під час перевірки регулярних виразів. MySQL після версії 3.23.4 за умовчанням не враховує регістр.

Платформа Oracle підтримує пропозиції LIKE синтаксис стандарту ANSI. Підтримуються узагальнюючі символи % та знак підкреслення (_). Також підтримується пропозиція ESCAPE. Синтаксис пропозиції LIKE у Oracle наступний.

LIKE4> строковий_шаблон [ESCAPE скасовує_послідовність]

Специфічні для Oracle синтаксичні елементи мають такі значення.

LIKEC

Використовується повний набір символів UNICODE.

LIKE2

Використовується набір символів UNICODE USC2.

LIKE4

Використовується набір символів UNICODE USC4.

Оскільки платформа Oracle враховує регістр, слід включати вираз, рядковий_шаблон або те й інше у функцію UPPER. У цьому випадку ви завжди порівнюватимете те, що потрібно.

PostgreSQL

Платформа PostgreSQL підтримує ANSI синтаксис пропозиції LIKE. Підтримуються узагальнюючі символи % та знак підкреслення (_). Також підтримуються послідовності, що відміняють.

PostgreSQL за умовчанням враховує регістр. Для порівняння без урахування регістру PostgreSQL існує ключове слово ILIKE. Також ви можете використовувати оператор - як еквівалент LIKE та -* як еквівалент ILIKE, а також !- та !-* як еквіваленти NOT LIKE та NOT ILIKE відповідно. Це все розширення стандарту ANSI, які існують у PostgreSQL.

Наприклад, такі запити функціонально еквівалентні.

Оскільки в цих прикладах використовується нижній регістр, ви можете зіткнутися з проблемою обліку регістру. Тобто запит ведепошук по рядку '%ville' у нижньому регістрі, а таблиця може містити значення у верхньому регістрі, які не потраплять у результати - 'BROWNSVILLE', 'NASHVILLE', 'HUNTSVILLE'. Цю проблему можна вирішити так, як показано в наведеному нижче прикладі.

Перетворимо значення у верхній регістр

Виробляємо порівняння без урахування регістру SELECT * FROM authors WHERE city

Ви повинні знати (хоча це і виходить за рамки цієї книги), що PostgreSQL також підтримує регулярні вирази POSIX. Подробиці наведено в описі платформи.

SQL Server

Платформа SQL Server підтримує ANSI синтаксис пропозиції LIKE. Підтримуються послідовності, що відміняють. Також підтримуються наступні додаткові узагальнюючі оператори.

[] - відповідає будь-якому значенню із зазначеного набору, наприклад [abc], або діапазону, наприклад [к-п].

[Л] - відповідає будь-якому символу, який не входить у вказаний набір або діапазон.

Додаткова інформація на тему

Деякі хитрощі при використанні інструкції REVOKE у базах даних на різних платформах

Деякі поради щодо використання інструкції MERGE у базах даних на різних платформах

Поради щодо використання інструкції UPDATE у базах даних на найрізноманітніших платформах

Деякі особливості використання інструкції INSERT у базах даних на різних платформах