Базы данных

Строковые и символьные функции

SELECT LTRIM('  TeXt DATA') XI,

LTRIMC _ # TeXt DATA', ' #_') X2,

LTRIMC 1234567890 TeXt DATA', ' 1234567890') X3

FROM dual

XI

Х2

ХЗ

TeXt DATA

TeXt DATA

TeXt DATA

Функция REPLACE(str, search_str, [,replace_str])

Функция REPLACE осуществляет поиск образца search_str в строке str и каждое найденное вхождение заменяет на replace_str. По умолчанию replace_str равен пустой строке, поэтому вызов функции REPLACE с двумя аргументами приводит к удалению всех найденных вхождений. Поиск подстроки ведется с учетом регистра.

Пример:

SELECT REPLACE('У попа была собака', 'собака', 'кошка') xl, REPLACE('y попа была злая собака', 'злая') х2, REPLACE('y попа была собака', 'Собака', 'Кошка') хЗ FROM dual

XI                                    Х2                                    ХЗ

У попа была кошка        У попа была собака       У попа была собака

Функция TRANSLATE(str, from_mask, to_mask)

Функция TRANSLATE анализирует строку str и заменяет в ней все символы, встречающиеся в строке from_mask, на соответствующие символы из to_mask. Для корректной работы функции строки from_mask и to_mask должны иметь одинаковую длину или строка from_mask должна быть длиннее, чем to_mask. Если from_mask длинее, чем to_mask, и в процессе обработки строки str обнаружатся символы, соответствующие одному из символов from_mask, и при этом им не найдется соответствия в to_mask, то такие символы будут удалены из строки str. Если передать from_mask или to_mask, равное NULL, то функция возвратит значение NULL. Сравнение производится с учетом регистра.

Примеры:

SELECT TRANSLATE('Test 12345', 'е2', 'Е!') xl, TRANSLATE('Test 12345', 'е234', 'Е') х2 FROM dual

XI__________________ Х2_________________

TEst 11345                      TEst 15

Данная функция удобна для решения ряда практических задач, связанных с перекодировкой символов или с поиском запрещенных символов. Например, необходимо проанализировать пароль и выяснить, содержит ли он хотя бы одну цифру. Реализация данной проверки при помощи TRANSLATE имеет вид:

IF TRANSLATE(PassWd,   '0123456789', '*') = PassWd THEN ADD_ERR0R('Ошибка  - Пароль должен содержать хотя бы одну цифру   !'); RETURN  1; END  IF;

Другой пример: идет подготовка числа к его преобразованию в NUMBER. Необходимо заменить разделители десятичных знаков «,» и «.» на «.» и удалить пробелы. Реализация данной операции при помощи TRANSLATE имеет вид:

предыдущаяследующая