loading..
Русский    English
21:41
листать

Предикат LIKE стр. 2

Предикат LIKE и регулярные выражения

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

В  Cистема управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server 2005/2008 использование регулярных выражений возможно через CLR, т.е. посредством языков Visual Studio, которые могут использоваться для написания хранимых процедур и функций.

Однако в Transact-SQL, помимо стандартных символов-шаблонов ("%" и "_"), существует еще пара символов, которые делают этот предикат LIKE более гибким инструментом. Этими символами являются:

  • [ ] - одиночный символ из набора символов (например, [zxy]) или диапазона ([a-z]), указанных в квадратных скобках. При этом можно перечислить сразу несколько диапазонов (например, [0-9a-z]);
  • ^ - который в сочетании с квадратными скобками исключает из поискового образца символы из набора или диапазона.

Поясним использование этих символов на примерах.

Консоль
Выполнить
  1. SELECT * FROM
  2. (
  3. SELECT '5%' name    UNION ALL
  4. SELECT '55'              UNION ALL
  5. SELECT '5%%'          UNION ALL
  6. SELECT '3%%'          UNION ALL
  7. SELECT 'a5%%'        UNION ALL
  8. SELECT 'abc'             UNION ALL
  9. SELECT 'abc 5% cde' UNION ALL
  10. SELECT '5c2e'           UNION ALL
  11. SELECT 'C2H5OH'      UNION ALL
  12. SELECT 'C25OH'        UNION ALL
  13. SELECT 'C54OH'
  14. ) x
  15.  /* 1 */
  16.  --WHERE name LIKE'5%' -- начинается с 5
  17.  /* 2 */
  18.  --WHERE name LIKE '5[%]' -- 5%
  19.  /* 3 */
  20.  --WHERE name LIKE '5|%' ESCAPE '|'-- 5%
  21.  /* 4 */
  22.  --WHERE name LIKE '%5|%%' ESCAPE '|' -- 5% в любом месте строки
  23.  /* 5 */
  24.  --WHERE name LIKE '[0-9][a-zA-Z]%' -- первая цифра, вторая буква
  25.  /* 6 */ 
  26.  --WHERE name LIKE '[a-z][0-9]%' -- первая буква, вторая цифра
  27.  /* 7 */
  28.  --WHERE name LIKE '[^0-9]%' -- начинается не на цифру.
  29.  /* 8 */
  30.  --WHERE name LIKE '%[02468]%' -- содержит четную цифру.
  31.  /* 9 */
  32.  --WHERE name LIKE '%[02468][13579]%' -- комбинация четная-нечетная.

В данном запросе генерируются некоторые данные, для поиска в которых используется предикат LIKE. Девять примеров - это соответственно 9 закомментированных предложений WHERE. Для проверки результатов выполнения запроса на сайте предварительно снимите комментарий с одной из строк, начинающихся с WHERE. Тем, кто не может использовать сайт, приведу здесь результаты выполнения этих примеров.

1. Все строки, которые начинаются с 5:

name
5%
55
5%%
5c2e

2. Поиск строки '5%'. Символ в скобках воспринимается как обычный единичный символ:

name
5%

3. Другое решение, аналогичное второму, но использующее ESCAPE-символ, указывающий, что знак % следует воспринимать как обычный символ.

4. Поиск подстроки '5%', находящейся в любом месте строки:

name
5%
5%%
a5%%
abc 5% cde

5. Поиск строки, у которой первый символ является цифрой, а второй - буквой:

name
5c2e

6. Поиск строки, у которой первый символ является буквой, а второй - цифрой. Вариант для регистронезависимого сравнения:

name
a5%%
C2H5OH
C25OH
C54OH

7. Поиск строки, которая начинается не с цифры:

name
a5%%
abc
abc 5% cde
C2H5OH
C25OH
C54OH

8. Поиск строки, которая содержит четную цифру:

name
5c2e
C2H5OH
C25OH
C54OH

9. Поиск строки, которая содержит подряд идущие четную и нечетную цифры:

name
C25OH

Рекомендуемые упражнения: 35

Bookmark and Share
Страницы: 1 2
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INFORMATION_SCHEMA INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker Больше тэгов
Учебник обновлялся
месяц назад
https://exchangesumo.com/obmen/to/WEXBTC/
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.