Программирование >>  Программный интерфейс приложений 

1 ... 49 50 51 [ 52 ] 53 54 55 ... 264


Franklin LIKE Frank% -> 1

Frankfurter LIKE Frank% -> 1

Символ % найдет любую последовательность символов, включающую пустую строку. Таким образом, Frank% дает совпадение Frank :

Frank LIKE Frank% -> 1

Это означает, что по символу % система найдет любую строку, включая и пустую. Однако символ % не нейдет пустое значение (null). Любой поиск по щаблону с операндом, имеющим пустое значение (null), даст сбой:

Frank LIKE NULL -> NULL

NULL LIKE Frank% -> NULL

В СУБД MySQL оператор LIKE не реагирует на регистр, если ни один из операндов не является двоичной строкой. Таким образом, строка Frank% при обычном сравнении найдет обе строки Frankly и frankly , но при двоичном сравнении будет найдена только первая из них:

Frankly LIKE Frank% -> 1

frankly LIKE Frank% -> 1

BINARY Frankly LIKE Frank% -> 1

BINARY frankly LIKE Frank% -> 0

В этом заключается различие оператора like в СУБД MySQL и в стандарте языка SQL, принятом ANSI (Американским Национальным институтом стандартов). В соответствии с этим стандартом, оператор LIKE реагирует на регистр.

Шаблон может быть указан в любом месте образца. Так, по образцу ?ibert будут найдены значения Englebert , Bert и Albert . А по образцу %bert% будут найдены все эти значения плюс строки Berthold , Bertram И Alberta .

Другой щаблон, выбирает строки, где на данной позиции может

стоять любой символ. Образец выберет любую строку, состоящую

точно из любых трех символов. Образец c t выберет строки наподобие cat , cot , cut и даже c t (символ совпадает с самим собой).

Для отключения специальной функциональности символов-шаблонов % и их необходимо предварить обратной косой чертой (\% или \ ):

аЬс LIKE а%е -> 1

аЬс LIKE а\%с -> О

а%с LIKE а\%с -> 1

Другая форма поиска по образцу в MySQL позволяет использование регулярных выражений. Для этого используется оператор REGEXP. (RLIKE синоним REGEXP.) Ниже приведены шаблоны, употребляемые наиболее часто.

. . Шаблон любого символа:

аЬс REGEXP а.с -> 1



[ ] Шаблон любого символа, заключенного в квадратные скобки. Внутри квадратных скобок можно указать начальный и конечный символ диапазона, разделенный символом тире -. Чтобы инвертировать смысл выражения (найти любой символ, не указанный в списке), укажите в качестве первого символа символ :

abc REQEXP [a-z] -> 1

abc REGEXP [ a-z] -> 0

Символ * означает любое число символов, совпадающих с предшествующим символом . Это значит, что х* найдет любое количество символов х:

abcdef REGEXP a.*f -> 1

abc REGEXP [0-9]*abc -> 1

abc REGEXP [0-9И0-9]* -> 0

Любое количество включает нулевые экземпляры, поэтому второе выражение в результате дает истину . Образцы pat и pat$ закрепляют шаблон таким образом, что комбинация pat будет найдена только в том случае, если она встречается в начале или в конце строки, а ~pat$ означает, что комбинация pat будет найдена только в том случае, если совпадает со всей строкой:

abc REGEXP b -> 1

abc REGEXP b -> 0

abc REGEXP bS -> 0

abc REGEXP abcS -> 1

abed REGEXP abc$ -> 0

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

Кроме того, регулярные выражения имеют и другие специальные символы. С ними можно познакомиться в приложении В, Операторы и функции .

Приоритет операций

При вычислении выражений интерпретатор СУБД MySQL определяет порядок действий. Обычно одни операции имеют более высокий приоритет и выполняются раньше других. Например, операции умножения и деления имеют самый высокий приоритет. Поэтому они будут вычисляться раньше других. Вот два выражения, которые эквивалентны потому, что операции * и / вычисляются до операций + и -. Результат этих выражений тоже будет идентичен;

1+2*3-4/5 -> 6.2

1+6-.8 ->6.2

Приоритет операторов приведен в нижеследующем списке. Он начинается операторами с высоким приоритетом и заканчивается оператора-



ми с низким приоритетом. Операторы, представленные в одной строке, имеют равный приоритет. Операторы с высоким приоритетом вычисляются раньше операторов с низким приоритетом.

BINARY NOT !

- (унарный минус) / %

<< >>

< <= = <=> != О >= > IN IS LIKE REGEXP RLIKE BETWEEN AND S.S. OR I I

Приоритет операций меняется с помощью скобок. Это меняет порядок выполнения операции:

1+2*3-4/5 ~> 6.2

(1 + 2) * (3 - 4) / 5 -> -0.6

Пустые значения в выражениях

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

Пустое значение (nqll) в качестве операнда любого арифметического или битового оператора даст в результате null:

1 + NULL -> NULL

1 I NULL -> NULL

Пустое значение (null) в качестве операнда логического оператора рассматривается как ложное значение:

1 AND NULL -> О

1 OR NULL -> 1

О AND NULL -> О

0 OR NULL -> О

Пустое значение (null) в качестве операнда в операторах сравнения в результате дает пустое значение (null). Исключением являются операторы <=>, is null и is not null, которые специально рассчитаны на работу с пустыми значениями (null):

1 = NULL -> NULL NULL = NULL -> NULL 1 <=> NULL -> 0 NULL <=> NULL -> 1

1 IS NULL -> 0

NULL IS NULL -> 1

Bee функции возвращают пустое значение (null) при наличии значения аргумента (null). Исключением являются функции, которые были



1 ... 49 50 51 [ 52 ] 53 54 55 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика