|
_> ORDER BY vchar_fld;
+___________+ | vchar_fld | +___________+
| 12345 | | |
| abcd | | |
| QRSTUV | | |
| qrstuv | | |
| xyz | | |
+___________+
5 rows in set (0.00 sec)
Следующий запрос проводит шесть сравнений пяти разных строк:
mysql> SELECT STRCMP('12345','12345') 12345_12345,
_> STRCMP('abcd','xyz') abcd_xyz,
_> STRCMP('abcd','QRSTUV') abcd_QRSTUV,
_> STRCMP('qrstuv','QRSTUV') qrstuv_QRSTUV,
_> STRCMP('12345','xyz') 12345_xyz,
_> STRCMP('xyz','qrstuv') xyz_qrstuv;
+_____________+__________+_____________+_______________+___________+____________+ | 12345_12345 | abcd_xyz | abcd_QRSTUV | qrstuv_QRSTUV | 12345_xyz | xyz_qrstuv | +_____________+__________+_____________+_______________+___________+____________+ | 0 | _1 | _1 | 0 | _1 | 1 | +_____________+__________+_____________+_______________+___________+____________+ 1 row in set (0.00 sec)
В результате первого сравнения получаем вполне ожидаемое значение 0, поскольку строка сравнивалась сама с собой. Четвертое сравнение также дает 0, что немного неожиданно, поскольку строки состоят из одних и тех же букв, но в одной строке все буквы в верхнем регистре, а в другой – в нижнем. Причиной такого результата является то, что функция strcmp() MySQL не чувствительна к регистру, о чем надо пом_ нить при ее использовании. Остальные четыре сравнения дают или _1, или 1 в зависимости от порядка расположения строк в порядке сорти_ ровки. Например, strcmp('abcd','xyz') дает _1, поскольку строка 'abcd' идет перед строкой 'xyz'.
Наряду с функцией strcmp() MySQL позволяет использовать в блоке select операторы like и regexp для сравнения строк. Результатом таких сравнений будет 1 (для true) и 0 (для false). Следовательно, эти опера_ торы позволяют создавать выражения, возвращающие число, подобно функциям, описанным в этом разделе. Вот пример использования опе_ ратора like:
Строковые данные | |
mysql> SELECT name, name LIKE '%ns' ends_in_ns |
_> FROM department;
+________________+____________+ | name | ends_in_ns | +________________+____________+
| Operations | | | | | ||
| | Loans | | | | | |
| | Administration | | | | ||
+________________+____________+ 3 rows in set (0.25 sec)
В этом примере выбираются все названия отделов. Также есть выра_ жение, возвращающее 1, если название отдела заканчивается на «ns» или 0 в противном случае. Для поиска совпадений по более сложному шаблону можно использовать оператор regexp, как показано ниже:
mysql> SELECT cust_id, cust_type_cd, fed_id,
_> fed_id REGEXP '.{3}_.{2}_.{4}' is_ss_no_format _> FROM customer;
+_________+______________+_____________+_________________+ | cust_id | cust_type_cd | fed_id | is_ss_no_format | +_________+______________+_____________+_________________+
| | | I | | 111_11_1111 | | | | |||
| | | I | | 222_22_2222 | | | | |||
| | | I | | 333_33_3333 | | | | |||
| | | I | | 444_44_4444 | | | | |||
| | | I | | 555_55_5555 | | | | |||
| | | I | | 666_66_6666 | | | | |||
| | | I | | 777_77_7777 | | | | |||
| | | I | | 888_88_8888 | | | | |||
| | | I | | 999_99_9999 | | | | |||
| | | B | | 04_1111111 | | | | | ||
| | | B | | 04_2222222 | | | | | ||
| | | B | | 04_3333333 | | | | | ||
| | | B | | 04_4444444 | | | | |
+_________+______________+_____________+_________________+ 13 rows in set (0.00 sec)
Четвертый столбец этого запроса возвращает 1, если значение в столб_ це fed_id соответствует формату номера социальной страховки.
Пользователи SQL Server и Oracle Database могут получить ана_ логичные результаты с помощью выражений case, описанных в главе 11.
Дата добавления: 2015-08-17; просмотров: 61 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Gt; LENGTH(vchar_fld) varchar_length, _> LENGTH(text_fld) text_length | | | Строковые функции, возвращающие строки |