loading..
Русский    English
15:58
листать

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

Синтаксис:

  1. LIKE::=
  2. <Выражение для вычисления значения строки>
  3. [NOT] LIKE <Выражение для вычисления значения строки>
  4. [ESCAPE <символ>]

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

  • символ подчеркивания (_), который можно применять вместо любого единичного символа в проверяемом значении;
  • символ процента (%) заменяет последовательность любых символов (число символов в последовательности может быть от 0 и более) в проверяемом значении.

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

Образец Описание
'abc%' Любые строки, которые начинаются с букв «abc»
'abc_' Строки длиной строго 4 символа, причем первыми символами строки должны быть «abc»
'%z' Любая последовательность символов, которая обязательно заканчивается символом «z»
'%Rostov%' Любая последовательность символов, содержащая слово «Rostov» в любой позиции строки
'% % %' Текст, содержащий не менее 2-х пробелов, например, "World Wide Web"

Пример 5.4.1

Найти все корабли, имена классов которых заканчиваются на букву ‘о’

Консоль
Выполнить
  1. SELECT *
  2. FROM Ships
  3. WHERE class LIKE '%o' ;

Результатом выполнения запроса будет следующая таблица:

name class launched
Haruna Kongo 1916
Hiei Kongo 1914
Kirishima Kongo 1915
Kongo Kongo 1913
Musashi Yamato 1942
Yamato Yamato 1941

Пример 5.4.2

Найти все корабли, имена классов которых заканчиваются на букву ‘о’, но не на ‘go’

Консоль
Выполнить
  1. SELECT *
  2. FROM Ships
  3. WHERE class NOT LIKE '%go' AND
  4. class LIKE '%o' ;

Name Class launched
Musashi Yamato 1942
Yamato Yamato 1941

Если искомая строка содержит трафаретный символ, то следует задать управляющий символ в предложении ESCAPE. Этот управляющий символ должен использоваться в образце перед трафаретным символом, сообщая о том, что последний следует трактовать как обычный символ. Например, если в некотором поле следует отыскать все значения, содержащие символ «_», то шаблон ‘%_%’ приведет к тому, что будут возвращены все записи из таблицы. В данном случае шаблон следует записать следующим образом:

  1. '%#_%' ESCAPE '#'

Для проверки значения на соответствие строке «25%» можно воспользоваться таким предикатом:

  1. LIKE '25|%' ESCAPE '|'

Следует заметить, что MySQL и PostgreSQL допускают помимо ESCAPE-символа экранирование трафаретных символов с помощью обратного слеша (\) в стиле некоторых языков программирования общего назначения. Для этих СУБД последние два шаблона можно записать так:

  1. '%\_%'
  2. '25\%'

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

Истинностное значение предиката LIKE присваивается в соответствии со следующими правилами:

  • если либо проверяемое значение, либо образец, либо управляющий символ есть NULL, истинностное значение равно UNKNOWN;
  • в противном случае, если проверяемое значение и образец имеют нулевую длину, истинностное значение равно TRUE;
  • в противном случае, если проверяемое значение соответствует шаблону, то предикат LIKE равен TRUE;
  • если не соблюдается ни одно из перечисленных выше условий, предикат LIKE равен FALSE.

Рекомендуемые упражнения: 44, 45, 74

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/WMR-WMU/ . ремонт ноутбуков
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.