Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
17.04.2018
Размер:
124.42 Кб
Скачать

Текстовые функции

Текстовые функции, называемые в Oracle символьными функциями (character functions), оперируют с текстовыми строками. Чаще всего с текстовыми строками требуется делать следующее: изменять регистр символов (на верхний, нижний или смешанный); разбивать длинные строки на несколько более коротких подстрок; очищать текст, поступающий из внешнего источника, от избыточных пробелов в конце.

UPPER, LOWER и INITCAP

Эти три функции меняют регистр переданного им текста: UPPER устанавливает верхний регистр буквенных символов в тексте, LOWER - нижний регистр, а INITCAP устанавливает верхний регистр для первой буквы каждого слова в тексте.

Например, следующие команды

SELECT UPPER (product_name) FROM product;

SELECT LOWER (product_name) FROM product;

SELECT INITCAP(product_name) FROM product;

дают результаты, показанные ниже:

SQL> SELECT UPPER(product_name) FROM product;

UPPER(PRODUCT_NAME)

---------------------------------------------

smail midget

medium wodget

chrome phoobar

round chrome snaphoo

extra huge mega phoobar +

SQL> SELECT LOWER(product_name) FROM product;

LOWER(PRODUCT_NAME)

----------------------------------------------

smail midget

medium wodget

chrome phoobar

round chrome snaphoo

extra huge mega phoobar +

SQL> SELECT INITCAP (product_name) FROM product;

INITCAP(PRODUCT_NAME)

Small Widget

Medium Wodget

Chrome Phoobar

Round Chrome Snaphoo

Extra Huge Mega Phoobar +

Как можно заметить, функция INITCAP в данном случае ничего не делает, поскольку каждое слово в названиях товаров и так начинается с большой буквы. Способность этой функции наводить порядок в тексте гораздо лучше демонстрирует следующая команда:

SELECT INITCAP( ' this TEXT hAd UNpredictABLE caSE' ) FROM DUAL;

Из всех трех символьных функций, меняющих регистр, чаще всего используется функция UPPER. Она очень полезна в операторах SELECT, когда нет уверенности, какими буквами был набран текст в столбце. В таких случаях достаточно подставить имя столбца в функцию UPPER, а искомый текст набрать в верхнем регистре:

SELECT * FROM product

WHERE UPPER(product_name) LIKE '%PHOOBAR%';

LENGTH

Временами требуется определять длину данных, хранимых в столбце таблицы. Такую возможность предоставляет функция LENGTH. Представим, например, что используется таблица, похожая на таблицу PRODUCT, и названия товаров из нее поступают в отдел каталогов. Там рассматривают возможность уменьшения размера страницы каталога, а новый размер требует сокращения длины названий товаров с 25 до 15 символов. Чтобы принять окончательное решение, в отделе хотели бы знать, сколько названий придется изменить. Можно составить список названий, требующих изменения, при помощи следующей команды:

SELECT product_name, LENGTH(product_name) NAME_LENGTH

FROM product

WHERE LENGTH(product_name) > 15

ORDER BY product_name;

Для столбца с длинами названий товаров здесь использован псевдоним NAME_LENGTH, чтобы заголовки столбцов было удобнее читать.

Функция LENGTH полезна также для определения максимальной и средней длины текста в столбце.

SUBSTR

Часто возникает ненобходимость разделять многосимвольные данные столбца на части. Например, может потребоваться преобразовать столбец такого вида

ITEM_ID

LA-101

LA-102

NY-101

NY-102

в несколько столбцов, например, таким образом:

LOCATION ITEM_NUMBER

LA 101

LA 102

NY 101

NY 102

Для выполнения данной операции Oracle предоставляет функцию SUBSTR:

SUBSTR (исходный_текст , позиция_начального_символа , количество_символов)

Чтобы разрезать строку на подстроки, необходимо указать, в какой позиции должна начинаться подстрока и какой длины она должна быть. В предыдущем примере первая подстрока содержит местонахождение производителя. Она начинается с первой позиции столбца ITEM_ID и имеет длину в два символа. Следующая подстрока содержит номер изделия, начинается с четвертой позиции и имеет длину в три символа.

Значение исходный_текст обычно представляет собой имя столбца, подлежащего разбору. Позиция_началъного_символа — это символ, с которого будет начинаться подстрока, а количество_символов — общее количество символов, которое она должна содержать. Разобрать идентификатор изделия на местонахождение производителя и номер изделия позволяет следующая команда:

SELECT SUBSTR(item_id, 1, 2) LOCATION,

SUBSTR(item_id, 4, 3) ITEM_NUMBER FROM old_item

Разбор строк очень часто требуется при переносе данных из одного приложения в другое, поскольку два приложения практически никогда не хранят данные абсолютно одинаковым образом.

INSTR

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

Синтаксис функции INSTR выглядит следующим образом:

INSTR(ucxoдный_meкcm , текст _для_поиска , позиция_началъного_символа)

Как правило, исходный_текст представляет собой имя столбца, содержащего длинную строку, которую нужно разобрать. Текст_для_поиска — это текст, который вы хотите найти, а позиция_начального_символа определяет номер символа исходного текста, с которого будет начат поиск (чтобы поиск выполнялся с самого начала текста, указывается значение 1).

Функция INSTR может помочь в разделении столбца ITEM_ID таблицы OLD_ITEM нa две части. Все, что нужно сделать, — это найти положение символа, отделяющего местонахождение производителя от его номера. Используя возвращенное функцией число, можно указать правильный размер для местонахождение производителя , а также начальную позицию для его номера:

SELECT SUBSTR(item_id, 1, INSTR(item_id, '-' , 1 ) -1 ) LOCATION,

SUBSTR(item_id, INSTR(item_id, '-' , 1 ) +1), 3) ITEM_NUMBER FROM old_item

LTRIM и RTRIM

Процесс удаления избыточных пробелов в начале или конце текстовой строки называется обрезанием (trimming), и для этого в Oracle есть две функции: LTRIM и RTRIM. Функция LTRIM удаляет пробелы в начале строки, а функция RTRIM — в конце. Они имеют одинаковый синтаксис:

LTRIM (имя_столбца)

RTRIM (имя_столбца)

Соседние файлы в папке лекции оракл