Читайте также: |
|
_> FROM string_tbl;
+_____________+________________+_____________+ | char_length | varchar_length | text_length | +_____________+________________+_____________+
| | 28 | | 28 | | 28 | |
+_____________+________________+_____________+ 1 row in set (0.00 sec)
Длины столбцов varchar и text вполне ожидаемы, но предполагалось, что столбец char содержит строки длиной 30 символов, – я ведь говорил, что строки, хранящиеся в столбцах типа char, дополняются пробелами спра_ ва. Но сервер MySQL удаляет пробелы в конце строки при извлечении данных типа char, поэтому для всех строковых функций, независимо от типа столбца, хранящего строки, получены аналогичные результаты.
Кроме определения длины строки может потребоваться найти место_ положение подстроки в строке. Например, если надо определить, где в столбце vchar_fld располагается строка «characters», можно восполь_ зоваться функцией position() (положение), как показано ниже:
mysql> SELECT POSITION('characters' IN vchar_fld)
_> FROM string_tbl;
+_____________________________________+ | POSITION('characters' IN vchar_fld) | +_____________________________________+
| | 19 | |
+_____________________________________+ 1 row in set (0.12 sec)
Если не получается найти подстроку, функция position() возвращает 0.
Программисты на таких языках, как С или С++, в которых пер_ вый элемент массива имеет порядковый номер 0, при работе с базами данных должны помнить, что порядковый номер пер_ вого символа строки равен 1. Если функция position() возвраща_ ет значение 0, это указывает на то, что подстрока не найдена, а не на то, что подстрока обнаружена в строке на первой позиции.
Строковые данные | |
Если требуется начать поиск не с первого символа целевой строки, не_ обходимо использовать функцию locate(), аналогичную функции po_ sition() за тем исключением, что допускает третий необязательный параметр, предназначенный для задания стартовой позиции поиска. И еще функция locate() является собственной функцией производите_ лей БД, тогда как position() – часть стандарта SQL:2003. Вот пример запроса позиции строки 'is', начинающего поиск с пятого символа столбца vchar_fld:
mysql> SELECT LOCATE('is', vchar_fld, 5)
_> FROM string_tbl;
+____________________________+ | LOCATE('is', vchar_fld, 5) | +____________________________+
| | 13 | |
+____________________________+ 1 row in set (0.02 sec)
В Oracle Database нет функции position() или locate(), но есть функция instr(), которая воспроизводит функцию position(), если задано два аргумента, и функцию locate(), если задано три аргумента. В SQL Server тоже нет функции position() или lo_ cate(), но есть функция charindx(), которая также принимает два или три аргумента аналогично функции instr() Oracle.
Еще одна функция, принимающая строки в качестве аргументов и воз_ вращающая числа, – функция сравнения строк strcmp(). Strcmp(), ко_ торая реализована только в MySQL и не имеет аналогов в Oracle Data_ base или SQL Server. Она принимает в качестве аргументов две строки и возвращает одно из следующих значений:
_1 если первая строка в порядке сортировки расположена до второй строки
0 если строки идентичны
1 если первая строка в порядке сортировки расположена после второй строки
Чтобы проиллюстрировать работу этой функции, сначала покажем с помощью запроса порядок сортировки пяти строк, а затем проведем сравнение строк с помощью функции strcmp(). Вот пять строк, кото_ рые будут вставлены в таблицу string_tbl:
mysql> DELETE FROM string_tbl;
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO string_tbl(vchar_fld) VALUES ('abcd');
Query OK, 1 row affected (0.03 sec)
mysql> INSERT INTO string_tbl(vchar_fld) VALUES ('xyz');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO string_tbl(vchar_fld) VALUES ('QRSTUV');
Query OK, 1 row affected (0.00 sec)
130 Глава 7. Создание, преобразование и работа с данными
mysql> INSERT INTO string_tbl(vchar_fld) VALUES ('qrstuv');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO string_tbl(vchar_fld) VALUES ('12345');
Query OK, 1 row affected (0.00 sec)
Вот эти пять строк в порядке сортировки:
mysql> SELECT vchar_fld
Дата добавления: 2015-08-17; просмотров: 52 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Работа со строками | | | Gt; FROM string_tbl |