поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    6.3.2.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 TRUNCATE(-1.999,1);
              -> -1.9
      

      Начиная с MySQL 3.23.51 все числа округляются к нулю.

      Если D является негативным, то тогда вся часть числа округляется к нулю.

      mysql> select truncate(122,-2);
             -> 100
      

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

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

      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 SOUNDS LIKE expr

      Тоже самое что и SOUNDEX(expr)=SOUNDEX(expr) (доступно в версии 4.1 или новее).

    • expr REGEXP pat , expr RLIKE pat

      Выполняет сравнение строкового выражения expr с шаблоном pat. Шаблон может представлять собой расширенное регулярное выражение. See Приложение F, Регулярные выражения в 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. Более подробное описание и примеры использования приведены в разделе Раздел 6.8, «Полнотекстовый поиск в MySQL».

     
    © 1997-2005 PHP Club Team
    Rambler's Top100