Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Справочник по языку MySQL /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Функции, используемые в операторах SELECT и WHERE (часть 1) - Программирование от RIN.RU
Функции, используемые в операторах SELECT и WHERE (часть 1)



Функции сравнения строк


Обычно если при выполнении сравнения строк одно из выражений является зависимым от регистра, то сравнение выполняется также с учетом регистра.


expr LIKE pat [ESCAPE 'escape-char']

Функция производит сравнение с шаблоном, используя операции сравнения простых регулярных выражений в SQL. Возвращает 1 (ИСТИНА) или 0 (ЛОЖЬ). Выражение LIKE предусматривает использование следующих двух шаблонных символов в pat:


Символ Описание
% Соответствует любому количеству символов, даже нулевых
_ Соответствует ровно одному символу


mysql> SELECT 'David!' LIKE 'David_';
-> 1


mysql> SELECT 'David!' LIKE '%D%v%';
-> 1


Если требуется исследовать литералы при помощи шаблонного символа, следует предварить шаблонный символ экранирующим символом. Если экранирующий символ конкретно не указывается, то подразумевается применение символа '\':


Строка Описание
\% Соответствует одному символу '%'
\_ Соответствует одному символу '_'


mysql> SELECT 'David!' LIKE 'David\_';
-> 0


mysql> SELECT 'David_' LIKE 'David\_';
-> 1


Для указания конкретного экранирующего символа используется выражение ESCAPE:


mysql> SELECT 'David_' LIKE 'David|_' ESCAPE '|';
-> 1


В следующих двух примерах показано, что сравнение строк производится с учетом регистра, если ни один из операндов не является строкой с двоичными данными:


mysql> SELECT 'abc' LIKE 'ABC';
-> 1
mysql> SELECT 'abc' LIKE BINARY 'ABC';
-> 0


В функции LIKE допускаются даже числовые выражения! (Это расширение MySQL по сравнению с ANSI SQL LIKE.)


mysql> SELECT 10 LIKE '1%';
-> 1


Примечание: поскольку в MySQL применяются правила экранирования в строках, применяемые в языке C (например, '\n'), необходимо дублировать все символы '\', используемые в строках функции LIKE. Например, для поиска сочетания символов '\n' его необходимо указать как '\\n'. Чтобы выполнить поиск символа '\', он должен быть указан как '\\\\' (обратные слеши удаляются дважды: сначала синтаксическим анализатором, а потом - при выполнении сравнения с шаблоном, таким образом остается только один обратный слеш, который и будет обрабатываться).

expr NOT LIKE pat [ESCAPE 'escape-char']

То же, что и NOT (expr LIKE pat [ESCAPE 'escape-char']).

expr REGEXP pat


expr RLIKE pat

Выполняет сравнение строкового выражения expr с шаблоном pat. Шаблон может представлять собой расширенное регулярное выражение. См. раздел Регулярные выражения в MySQL. Возвращает 1, если expr соответствует pat, в противном случае - 0. Функция RLIKE является синонимом для REGEXP, она предусмотрена для совместимости с mSQL. Примечание: поскольку в MySQL используются правила экранирования в строках, применяемые в языке C (например, '\n'), необходимо дублировать все символы '\', используемые в строках функции REGEXP. Что касается версии MySQL 3.23.4, функция REGEXP является независимой от регистра для нормальных строк (т.е. строк не с двоичными данными):


mysql> SELECT 'Monty!' REGEXP 'm%y%%';
-> 0


mysql> SELECT 'Monty!' REGEXP '.*';
-> 1


mysql> SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';
-> 1


mysql> SELECT "a" REGEXP "A", "a" REGEXP BINARY "A";
-> 1 0


mysql> SELECT "a" REGEXP "^[a-d]";
-> 1


В REGEXP и RLIKE используется текущий набор символов (ISO-8859-1 Latin1 по умолчанию),

expr NOT REGEXP pat


expr NOT RLIKE pat

То же, что и NOT (expr REGEXP pat).

STRCMP(expr1,expr2)

Функция STRCMP() возвращает: 0, если строки идентичны, -1 - если первый аргумент меньше второго (в соответствии с имеющимся порядком сортировки), и 1 - в остальных случаях:


mysql> SELECT STRCMP('text', 'text2');
-> -1


mysql> SELECT STRCMP('text2', 'text');
-> 1


mysql> SELECT STRCMP('text', 'text');
-> 0


MATCH (col1,col2,...) AGAINST (expr)


MATCH (col1,col2,...) AGAINST (expr IN BOOLEAN MODE)

Функция MATCH ... AGAINST() используется для полнотекстового поиска и возвращает величину релевантности - степень сходства между текстом в столбцах (col1,col2,...) и запросом expr. Величина релевантности представляет собой положительное число с плавающей точкой. Нулевая релевантность означает отсутствие сходства. Функция MATCH ... AGAINST() работает в версиях MySQL 3.23.23 или более поздних. Расширение IN BOOLEAN MODE было добавлено в версии 4.0.1. Более подробное описание и примеры использования приведены в разделе Полнотекстовый поиск в MySQL.




Чувствительность к регистру


По умолчанию поиск в MySQL является независимым от регистра символов (хотя существуют некоторые кодировки, которые всегда чувствительны к регистру, такие как czech). Это означает, что при поиске с помощью col_name LIKE 'a%' будут выданы все значения столбца, начинающиеся на A или a. Если необходимо выполнить тот же поиск с учетом регистра, для проверки префикса следует использовать что-то вроде INSTR(col_name, "A")=1 или STRCMP(col_name, "A") = 0, если значение в столбце точно равно A.


Простые операции сравнения (>=, >, =, <, <=, сортировка и группировка) основываются на "сорте" каждого символа. Символы одного сорта (такие как E, e и E) обрабатываются как одинаковые символы!


В старых версиях MySQL сравнения по LIKE выполнялись над символами, переведенными в верхний регистр (E == e, но E <> E). В новых версиях MySQL LIKE работает точно так же, как другие операторы сравнения.


Если необходимо, чтобы столбец всегда обрабатывался в с учетом регистра, объявите его с типом BINARY (см. раздел Синтаксис оператора CREATE TABLE).


Если вы используете китайские данные в так называемой кодировке big5, то имеет смысл объявить все символьные столбцы как BINARY. Сортировка таких столбцов будет работать, поскольку порядок сортировки символов в кодировке big5 основывается на порядке кодов ASCII.


<<<  НазадВперед  >>>
 1  2  3  4  5  6 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Структура языка

Типы данных столбцов

Функции, используемые в операторах SELECT и WHERE (часть 2)

Обработка данных: SELECT, INSERT, UPDATE, DELETE

Определение данных: CREATE, DROP, ALTER

Основные команды пользовательских программ MySQL

Команды управления транзакциями и блокировками в MySQL

Полнотекстовый поиск в MySQL

Кэш запросов в MySQL

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь