[ начальная позиция поиска [ , номер появления ] ]);
SELECT INSTR (STATE, ' I ', 1, 1) Этот оператор SQL для каждого названия
FROM EMPLOYEE_TBL; штата из таблицы EMPLOYEE_TBL возвраща-
ет номер позиции, в которой первый раз
встречается буква I
SELECT PROD_DESC,
INSTR(PROD_DESC,'A',1,1)
FROM PRODUCTSJTBL;
PROD_DESC INSTR(PROD_DESC, 'A',1,1)
КОСТЮМ ВЕДЬМЫ О
ПЛАСТИКОВЫЕ ТЫКВЫ 3
ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 16
ФОНАРИ 4
КОСТЮМЫ В АССОРТИМЕНТЕ 11
СЛАДКАЯ КУКУРУЗА 3
ТЫКВЕННЫЕ КОНФЕТЫ О
ПЛАСТИКОВЫЕ ПАУКИ 3
МАСКИ В АССОРТИМЕНТЕ 2
ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ 7
ПОЛОЧКА ИЗ ДУБА 7
11 строк выбраны.
Обратите внимание на то, что в том случае, когда символ А в строке не найден, для позиции возвращается значение 0.
Функция LTRIM представляет еще одну возможность для выделения части строки. Эта функция относится к тому же семейству, что и функция SUBSTRING. Функция LTRIM обрезает заданное множество символов с начала строки.
Синтаксис соответствующего оператора следующий.
LTRIM(строка символов, [ , 'множество символов' ]);
SELECT LTRIM(FIRST_NAME, ' LES') Этот оператор SQL обрезает символы
LES FROM CUSTOMERJTBL в начале всех имен LESLIE
WHERE FIRST_NAME = 'LESLIE';
SELECTPOSITION, LTRIM(POSITION,'SALES')
FROM EMPLOYEE_PAY_TBL;
POSITION LTRIM(POSITION,
MARKETING MARKETING
TEAM LEADER TEAM LEADER
SALES MANAGER MANAGER
SALESMAN MAN
SHIPPER HIPPER
SHIPPER HIPPER
6 строк выбраны.
В строке SHIPPER была обрезана буква S, хотя эта строка и не содержит подстроку SALES. В данном случае первые четыре символа строки SALES были проигнорированы. Искомые символы должны встречаться в строке именно в заданном порядке и находиться с самого левого края строки. Другими словами, функция LTRIM срезает в строке все символы слева до последнего символа искомой строки включительно.
Подобно LTRIM, функция RTRIM обрезает заданное множество символов в конце строки.
Синтаксис соответствующего оператора следующий.
RTRIM(CTpoKa символов, [ , 'множество символов' ]);
SELECT RTRIM(FIRST_NAME, 'ON' ) Этот оператор SQL возвращает имя
FROM EMPLOYEEJTBL BRANDON и обрезает символы ON в конце,
WHERE FIRST_NAME = ' BRANDON ' ; остается только BRAND
SELECT POSITION, RTRIM(POSITION,'ER')
FROM EMPLOYEE_PAY_TBL;
POSITION RTRIM(POSITION,
MARKETING MARKETING
TEAM LEADER TEAM LEAD
SALES MANAGER SALES MANAG
ALESMAN SALESMAN
SHIPPER SHIPP
SHIPPER SHIPP
6 строк выбраны.
Здесь строка ER была обрезана в конце всех подходящих строк.
Функция DECODE к стандартным функциям ANSI не относится - по крайней мере, на момент написания данной книги, - но ее использование обсуждается здесь ввиду предоставляемых ею больших возможностей. Эта функция имеется в SQLBase, Oracle и, возможно, других реализациях SQL. Функция DECODE используется для поиска строк по заданному значению или строке, и если строка найдена, в результатах запроса отображается другая заданная строка.
Синтаксис соответствующего оператора следующий.
DECODE(имя столбца, 'искомая1', 'возвращаемая1'
[,'искомая2', 'возвращаемая2', 'значение по умолчанию']);
SELECT DECODE (LAST_NAME, Этот запрос извлекает все фамилии из таблицы
'СМИТ', 'ДЖОНС', 'ДРУГОЕ') EMPLOYEE_TBL, причем вместо фамилии
FROM EMPLOYEE_TBL; СМИТ отображается ДЖОНС, а вместо любой
другой -
случае является значение ДРУГОЕ
В следующем примере функция DECODE используется по отношению к значениям столбца CITY таблицы EMPLOYEEJTBL.
SELECT CITY,
DECODE(CITY,'INDIANAPOLIS', 'INDY',
'GREENWOOD', 'GREEN', 'OTHER')
FROM EMPLOYEE _TBL;
CITY DECOD
GREENWOOD GREEN
INDIANAPOLIS INDY
WHITELAND OTHER
INDIANAPOLIS INDY
INDIANAPOLIS INDY
INDIANAPOLIS INDY
6 строк выбраны.
В результате вместо названия Индианаполиса отображается INDY, вместо Гринвуда отображается GREEN, а для любого другого города - OTHER.
В следующих разделах рассматриваются функции, о которых полезно знать. Опять же, эти функции оказываются общими для большинства основных реализаций SQL.
Для выяснения длины строки символов, числа, значения даты или выражения в байтах используется функция LENGTH.
Синтаксис соответствующего оператора следующий.
LENGTH(строка символов)
SELECT LENGTH (LAST_NAME) Этот оператор SQL возвращает длину фами-
FROM EMPLOYEE_TBL; лии для каждого из служащих
SELECT PROD_DESC, LENGTH(PROD_DESC)
FROM PRODXCTS_TBL;
PROD_DESC LENGTH(PROD_DESC)