Выбрать главу

SELECT LOWER (LAST_NAME) Этот оператор изменяет регистр всех символов в

FROM EMPLOYEEJTBL, заданном столбце с верхнего на нижний

SELECT LOWER(CITY)

FROM EMPLOYEEJTBL;

LOWER(CITY)

greenwood

Indianapolis

whiteland

Indianapolis

indianapolis

indianapolis

6 строк выбраны.

Функция SUBSTR

Функции для выделения подстрок из строк имеются во всех реализациях SQL, но имена таких функций могут отличаться, как видно из следующих примеров для Oracle и SQL Server.

В Oracle синтаксис соответствующего оператора следующий.

SUBSTR(имя столбца, начальная позиция, длина)

В случае SQL Server синтаксис соответствующего оператора будет следующим.

SUBSTRING(имя столбца, начальная позиция, длина)

Как видите, отличаются только имена функций.

Пример__________________________________Значение___________

SELECT SUBSTRING (EMP_ID,1,3) Этот оператор SQL возвращает первые три

FROM EMPLOYEE_TBL; символа строки EMP_ID

SELECT SUBSTRING (EMP_ID,4,2) Этот оператор SQL возвращает четвертый

FROM EMPLOYEE_TBL; ипятый символы строки EMP_ID

SELECT SUBSTRING (EMP_ID,6,4) Этот оператор SQL возвращает символы

FROM EMPLOYEE_TBL; с шестого по девятый включительно

строки EMP_ID

Вот пример использования данной функции в SQL Server.

SELECT EMP_ID, SUBSTRING(EMP_ID,1,3)

FROM EMPLOYEE_TBL;

EMP__ID SUB

311549902 311

442346889 442

213764555 213

313782439 313

220984332 220

443679012 443

6 rows affected.

А вот пример использования данной функции в Oracle.

SELECT EMP_ID, SUBSTR(EMP_ID,1, 3)

FROM EMPLOYEEJTBL;

EMP_ID SUB

311549902 311

442346889 442

213764555 213

313782439 313

220984332 220

443679012 443

6 rows selected.

Обратите внимание на выводимые в этих двух случаях сообщения базы данных. В первом случае это 6 rows affected, а во втором - 6 rows selected. Оба сообщения имеют одинаковый смысл (6 строк выбраны), но такого рода отличия нередко можно увидеть при сравнении различных реализаций SQL.

Функция INSTR

Функция INSTR используется для поиска заданного множества символов в строке и возвращает позицию, в которой данное множество символов встретилось. Синтаксис соответствующего оператора следующий.

INSTR(имя строки, 'множество символов',

[ начальная позиция поиска [ , номер появления ] ]);

Пример______________________________Значение_______________

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

Функция LTRIM представляет еще одну возможность для выделения части строки. Эта функция относится к тому же семейству, что и функция SUBSTRING. Функция LTRIM обрезает заданное множество символов с начала строки.

Синтаксис соответствующего оператора следующий.

LTRIM(строка символов, [ , 'множество символов' ]);

Пример_________________________________Значение___________

SELECT LTRIM(FIRST_NAME, ' LES') Этот оператор SQL обрезает символы

LES FROM CUSTOMERJTBL в начале всех имен LESLIE

WHERE FIRST_NAME = 'LESLIE';

SELECT POSITION, 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 срезает в строке все символы слева до последнего символа искомой строки включительно.

Функция RTRIM

Подобно 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

Функция 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.