Работа со строками в 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


Дополнительно:
  • TO_DATE — Преобразование строки в формат DATE (Время).
  • TO_NUMBER — Преобразование строки в формат NUMBER (Число).
  • TO_CHAR — Преобразование числа или даты в строку.


На этом пока всё.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.