Работа со строками в Oracle (PL/SQL)
Основные способы обработки строковых значений в Oracle.
В этой публикации я приведу основные функции работы со строками которые встречались мне в работе, и будут полезны всем кто работает с Oracle.
CONCAT - Объединяет две строки
SQL> select concat('Пётр ','первый') from dual;
CONCAT('ПЁТР','ПЕРВЫЙ')
-----------------------
Пётр первый
LOWER - Преобразует все символы в нижний регистр
SQL> select lower('Петр Первый') from dual;
LOWER('ПЕТРПЕРВЫЙ')
---------------------
петр первый
UPPER - Преобразует все символы строки в верхний регистр
SQL> select upper('Петр Первый') from dual;
UPPER('ПЕТРПЕРВЫЙ')
---------------------
ПЕТР ПЕРВЫЙ
INITCAP - Преобразует первый символ к верхнему регистру а остальные к нижнему
SQL> select initcap('петр') from dual;
INITCAP('ПЕТР')
---------------
Петр
TRIM - Удаляет заданный символ из строки
Синтаксис:
TRIM( [ [ LEADING | TRAILING | BOTH ] удаляемый_символ FROM ] строка_текста )
-- LEADING – удалить символы вначале строки.
-- TRAILING – удалить символы с конца строки.
-- BOTH – удалить символы и в начале строки и с конца строки.
--Если не указано что удалять, то удаляются пробелы.
Примеры:
SQL> select trim(' Петр 1 ') from dual;
TRIM('ПЕТР1')
-------------
Петр 1
SQL> select trim(' ' from ' Петр 1 ') from dual;
TRIM(''FROM'ПЕТР1')
-------------------
Петр 1
SQL> select trim(leading '*' from '***Петр 1') from dual;
TRIM(LEADING'*'FROM'***ПЕТР1')
------------------------------
Петр 1
SQL> select trim(trailing '1' from 'Петр 1') from dual;
TRIM(TRAILING'1'FROM'ПЕТР1')
----------------------------
Петр
SQL> select trim(both '1' from '1 Петр 1') from dual;
TRIM(BOTH'1'FROM'1ПЕТР1')
-------------------------
Петр
LTRIM - Удаляет заданные символы слева
Синтаксис:
LTRIM( изменяемая_строка, [ набор_символов ] )
--Если не указано что удалять, то удаляются пробелы
Примеры:
SQL> select ltrim(' Петр 1') from dual;
LTRIM('ПЕТР1')
--------------
Петр 1
SQL> select ltrim(' Петр 1', ' ') from dual;
LTRIM('ПЕТР1','')
-----------------
Петр 1
SQL> select ltrim('12233Петр 1', '123') from dual;
LTRIM('12233ПЕТР1','123')
-------------------------
Петр 1
RTRIM - Удаляет заданные символы справа
Синтаксис:
RTRIM( изменяемая_строка, [ набор_символов ] )
--Если не указано что удалять, то удаляются пробелы
Примеры:
SQL> select rtrim('Петр 1 ') from dual;
RTRIM('ПЕТР1')
--------------
Петр 1
SQL> select rtrim('Петр 1 ', ' ') from dual;
RTRIM('ПЕТР1','')
-----------------
Петр 1
SQL> select rtrim('Петр 123423', '234') from dual;
RTRIM('ПЕТР123423','234')
-------------------------
Петр 1
RPAD - Дополняет строку справа до указанного размера заданными символами
Синтаксис:
RPAD( исходная_строка, длина_строки, [ добавляемый_символ ] )
-- Если добавляемый символ не указан то строка дополняется пробелами
-- Если исходный размер строки более заданного то строка будет обрезана по заданный размер
Примеры:
SQL> select rpad('Петр', 6) from dual;
RPAD('ПЕТР',6)
--------------
Петр
SQL> select rpad('Петр', 6, '_') from dual;
RPAD('ПЕТР',6,'_')
------------------
Петр__
SQL> select rpad('Петр', 3) from dual;
RPAD('ПЕТР',3)
--------------
Пет
LPAD - Дополняет строку слева до указанного размера заданными символами
Синтаксис:
LPAD( исходная_строка, длина_строки, [ добавляемый_символ ] )
-- Если добавляемый символ не указан то строка дополняется пробелами
-- Если исходный размер строки более заданного то строка будет обрезана по заданный размер
Примеры:
SQL> select lpad('Петр', 6) from dual;
LPAD('ПЕТР',6)
--------------
Петр
SQL> select lpad('Петр', 6, '_') from dual;
LPAD('ПЕТР',6,'_')
------------------
__Петр
SQL> select lpad('Петр', 3, '_') from dual;
LPAD('ПЕТР',3,'_')
------------------
Пет
REPLACE - Заменяет некоторую последовательность символов в строке другим набором символов
Синтаксис:
REPLACE( исходная_строка, исходная_подстрока, [ новая_подстрока ] )
-- Если новая_строка не задана то из исходной_строки будут просто удалены все вхождения исходной_подстроки.
Примеры:
SQL> select replace('0000Петр', '0') from dual;
REPLACE('0000ПЕТР','0')
-----------------------
Петр
SQL> select replace('0000Петр', '0', '1') from dual;
REPLACE('0000ПЕТР','0','1')
---------------------------
1111Петр
SQL> select replace('0012312300Петр', '123', '1') from dual;
REPLACE('0012312300ПЕТР','123'
------------------------------
001100Петр
SQL> select replace('0012312300Петр', '123') from dual;
REPLACE('0012312300ПЕТР','123'
------------------------------
0000Петр
TRANSLATE Заменяет символы в исходной строке - сопоставляя их с другим набором символов. (смотреть пример, там понятно.)
Синтаксис:
TRANSLATE( исходная_строка, исходный_набор_символов, новый_набор_символов )
Пример:
SQL> select translate('000111000222333', '123', '567') from dual;
TRANSLATE('000111000222333','1
------------------------------
000555000666777
SQL> select translate('000111qa00zx0222333', '123zxqa', '567qazx') from dual;
TRANSLATE('000111QA00ZX0222333
------------------------------
000555zx00qa0666777
SUBSTR - Возвращает подстроку из строки
Синтаксис:
SUBSTR( исходная_строка, начальная_позиция, [ длина_подстроки ] )
-- Если начальная_позиция отрицательная - то отсчет идет от конца строки
-- Если начальная_позиция равна 0 то считается что начальная позиция равна 1
-- Если начальная_позиция положительная - то отсчет идет от начала строки
-- Если длина_подстроки отрицательная то функция вернет NULL
Примеры:
SQL> select substr('000111qa00zx0222333', 3, 5) from dual;
SUBSTR('000111QA00ZX0222333',3
------------------------------
0111q
SQL> select substr('000111qa00zx0222333', -10, 5) from dual;
SUBSTR('000111QA00ZX0222333',-
------------------------------
0zx02
INSTR - Возвращает N-ное вхождение подстроки в исходной строке
Синтаксис:
INSTR( исходная_строка, подстрока [, стартовая_позиция [, номер_искомой_позиции ] ] )
-- стартовая_позиция - это позиция с которой начнется поиск подстроки, если не задана то с первой
-- номер_искомой_позиции - номер включения которое надо найти, если не задан то первый
Примеры:
SQL> select instr('000111qa00zx0222333', '1', 1,3) from dual;
INSTR('000111QA00ZX0222333','1
------------------------------
6
SQL> select instr('000111qa00zx0222333', '0', 1,3) from dual;
INSTR('000111QA00ZX0222333','0
------------------------------
3
SQL> select instr('000111qa00zx0222333', '0', 1,5) from dual;
INSTR('000111QA00ZX0222333','0
------------------------------
10
LENGTH - Возвращает размер строки
SQL> select length('Пётр первый') from dual;
LENGTH('ПЁТРПЕРВЫЙ')
--------------------
11
SQL> select length('Пётр первый - Великий') from dual;
LENGTH('ПЁТРПЕРВЫЙ-ВЕЛИКИЙ')
----------------------------
21
VSIZE - Возвращает длину строки в байтах
SQL> select vsize('Test symbols') from dual;
VSIZE('TESTSYMBOLS')
--------------------
12
SQL> select vsize('Пётр') from dual;
VSIZE('ПЁТР')
-------------
8
ASCII - Возвращает ASCII код первого (левого) символа строки
SQL> select ascii('2') from dual;
ASCII('2')
----------
50
SQL> select ascii('a') from dual;
ASCII('A')
----------
97
SQL> select ascii('aza') from dual;
ASCII('AZA')
------------
97
CHR - Функция противоположная ASCII - возвращает символ из кода
SQL> select chr(50) from dual;
CHR(50)
-------
2
SQL> select chr(97) from dual;
CHR(97)
-------
a
REVERSE - Переворачивает строку задом на перед
SQL> select reverse('12345') from dual;
REVERSE('12345')
----------------
54321
SQL> select reverse('Test symbols') from dual;
REVERSE('TESTSYMBOLS')
----------------------
slobmys tseT
На этом пока всё.