SELECT и WHERE
Buy this Reference Manual in softcover from Barnes & Noble!
Обычно если при выполнении сравнения строк одно из выражений является зависимым от регистра, то сравнение выполняется также с учетом регистра.
expr LIKE pat [ESCAPE 'escape-char']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 patexpr RLIKE patexpr с шаблоном pat. Шаблон может представлять собой расширенное регулярное выражение. See section G Регулярные выражения в 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 patexpr NOT RLIKE patNOT (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. Более подробное описание и примеры использования приведены в разделе section 6.8 Полнотекстовый поиск в MySQL.| Posted by on Sunday July 14 2002, @11:10am | [Delete] [Edit] |
Keep in mind that
LIKE '%'
Does not match NULLs!
| Posted by Sascha RenИ Leib on Thursday October 10 2002, @5:29am | [Delete] [Edit] |
Also, keep in mind that by default,
Swedish/Finnish string comparison rules are in
use! This means that e.g.: u <> Э = y !
| Posted by Mohammad Khan on Thursday October 24 2002, @10:59am | [Delete] [Edit] |
mysqladmin --version
Ver 8.37 Distrib 4.0.3-beta, for pc-linux-gnu on i686
STRCMP doesn't work prefectly on my system
mysql> select STRCMP("beeplove", "beeplovE");
+--------------------------------+
| STRCMP("beeplove", "beeplovE") |
+--------------------------------+
| 0 |
+--------------------------------+
1 row in set (0.00 sec)
| Posted by on Monday January 20 2003, @5:18am | [Delete] [Edit] |
Mohammad's example shows how STRCMP() works (string comparison is NOT case sensitive by default, but only when one of the expressions to be compared are case sensitive):
The following one IS case sensitive:
select STRCMP('beehive', BINARY 'BeEhiVE') /* returns 1 */;
| Posted by on Sunday January 26 2003, @10:42pm | [Delete] [Edit] |
To match arabic strings (eg: search for arabic words in arabic fields) we should consider using BINARY for example:
SELECT * FROM table WHERE BINARY field LIKE '%зяхМ%'
For more tips, examples about using MySQL with Arabic data visit: http://www.php4web.com/article.php?sid=105&mode=thread&order=0
| Posted by on Monday February 17 2003, @9:50pm | [Delete] [Edit] |
in blob column 'like' acts as 'like binary'. -- Hyungjin Ahn(ahj6@hotmail.com)
Add your own comment.