|
Программирование >> Программный интерфейс приложений
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). Исключением являются функции, которые были
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |