Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных. Практический курс. В 2 частях. Ч.1. Объектно-реляционные базы данных на примере PostgreSQL 9.5. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
2 Мб
Скачать
Глава 5. Дополнительные возможности 5.5. Работа со строками
X
TEXT DATA
Функция INITCAP
Функция INITCAP(str) возвращает строку str, в которой пер­вые буквы всех слов преобразованы в прописные. Функция удобна для форматирования полного имени при построении отчетов.
Пример:
SELECT INITCAPИваноВ(’ петр сиДорович’) X;
X
Иванов Петр Сидорович
Функции LTRIM и RTRIM
Функция LTRIM(str [,set]) удаляет все символы с начала строки до первого символа, которого нет в наборе символов set. По умолчанию set состоит из одного пробела и может не указывать­ся. Функция RTRIM(str [,set]) аналогична LTRIM, но удаляет симво­лы, начиная от конца строки. Рассмотрим несколько примеров:
SELECT LTRIM(’ TeXt DATA’) X1, LTRIM(’ _ # TeXt DATA’, ’ #_’) X2, LTRIM(’ 1234567890 TeXt DATA’, ’ 1234567890’) X3 UNION ALL SELECT RTRIM(’TeXt DATA ’) X1, RTRIM(’TeXt DATA _ # ’, ’ #_’) X2, RTRIM(’TeXt DATA 1234567890 ’, ’ 1234567890’) X3;
X1 X2 X3
TeXt DATA TeXt DATA TeXt DATA TeXt DATA TeXt DATA TeXt DATA
Функция REPLACE
Функция REPLACE(str, search_str, replace_str) осуществляет поиск образца search_str в строке str и каждое найденное вхож-
101
5.5. Работа со строками Глава 5. Дополнительные возможности
дение заменяет на replace_str. Поиск подстроки ведется с учетом регистра.
Пример:
SELECT REPLACEУ(’ попа была собака’, собака’’, кошка’’) X1, REPLACEУ(’ попа была злая собака’, злая’’, ’’) X2, REPLACEУ(’ попа была собака’, Собака’’, Кошка’’) X3;
X1 X2 X3
У попа была кошка У попа была собака У попа была собака
Функция TRANSLATE
Функция TRANSLATE(str, from_mask, to_mask) анализирует
строку 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’, ’e2’, ’E!’) X1, TRANSLATE(’Test 12345’, ’e234’, ’E’) X2;
X1 X2
TEst 1!345 TEst 15
Данная функция удобна для решения ряда практических за­дач, связанных с перекодировкой символов или с поиском запре­щенных символов. Например, необходимо проанализировать па­роль и выяснить, содержит ли он хотя бы одну цифру. Реализация данной проверки при помощи TRANSLATE имеет вид:
102
Глава 5. Дополнительные возможности 5.5. Работа со строками
CREATE OR REPLACE FUNCTION is_password_correct(
password IN char) RETURNS int AS $is_password_correct$
BEGIN
IF TRANSLATE(password, ’0123456789’, ’*’) = password THEN
RAISE WARNING
Пароль’ должен содержать хотя бы одну цифру!’;
RETURN 0;
END IF;
RAISE INFO Корректный’ пароль!’;
RETURN 1; END; $is_password_correct$ LANGUAGE plpgsql;
Другой пример: идет подготовка числа к его преобразованию в NUMBER. Необходимо заменить разделители десятичных знаков ’,’ на ’.’ и удалить пробелы. Реализация данной операции при помощи
TRANSLATE имеет вид:
SELECT TRANSLATE(’123 455,23’, ’., ’, ’..’) X1, TRANSLATE(’-123 455.23’, ’., ’, ’..’) X2;
X1 X2
123455.23 –123455.23
Функция SUBSTR
Функция SUBSTR(str, m [,n]) возвращает фрагмент строки
str, начиная с символа m длиной n символов. Длину можно не
указывать – в этом случае возвращается строка от символа m и до конца строки str. Нумерация символов идет с 1. Если указать m равное 0, то копирование все равно начнется с первого символа. Задание отрицательного значения m приводит к тому, что символы отсчитываются от конца строки, а не от начала. Задание значений
m, превышающих по абсолютному значению длину строки, приводит
к тому, что функция возвращает NULL.
103
5.5. Работа со строками Глава 5. Дополнительные возможности
Пример:
SELECT SUBSTRУ(’ попа была собака’, 13) X1, SUBSTRУ(’ попа была собака’, -6) X2, SUBSTRЭто(’ тестовый текст’, 5, 8) X3, SUBSTRУ(’ попа была собака’, 150) X4;
X1 X2 X3 X4
собака собака текстовый NULL
Функция LENGTH
Функция LENGTH(str) возвращает длину строки str в символах.
Для пустой строки функция вернет 0, а для значения NULL NULL.
Пример:
SELECT LENGTHУ(’ попа была собака’) X1, LENGTH(’’) X2, LENGTH(NULL) X3;
X1 X2 X3
18 0 NULL
Функция ASCII
Функция ASCII(str) возвращает ASCII-код первого символа
строки str в случае применения кодировок ASCII и UTF-8.
Пример:
SELECT ASCII(’Test’) X1, ASCIIТест(’’) X2;
X1 X2
84 1058
104
Глава 5. Дополнительные возможности 5.6. Работа с датой и временем
Функция CHR
Функция CHR(n) возвращает символ по его коду.
Пример:
SELECT CHR(84) X1, CHR(1058) X2, CHR(80) X3, CHR(1060) X4;
X1 X2 X3 X4
T Т P Ф
5.6 Функции работы с датой и временем
В данном подразделе речь пойдет о функциях работы с датой и временем, а также функциями преобразования типов для даты. Для хранения даты и времени в PostgreSQL предусмотрен специальный тип timestamp. С физической точки зрения это дробное число, целая часть которого хранит количество дней с некоторой базовой даты, а дробная – время. Это позволяет совершать над датами арифмети­ческие операции – сложение и вычитание.
Функция NOW
Это одна из самых часто употребляемых функций, она возвра­щает текущую дату и время по часам сервера.
Пример:
SELECT NOW();
NOW
2016-09-05 21:31:10.095806+04
105
5.6. Работа с датой и временем Глава 5. Дополнительные возможности
Функция JUSTIFY_INTERVAL
Функция JUSTIFY_INTERVAL(interval) преобразует интервал (тип interval), указанный в виде строки в соответствующее значе­ние типа timestamp.
Пример:
SELECT NOW() D1,
NOW() + JUSTIFY_INTERVAL(’30 DAYS 1 HOUR 2 MINUTE’) D2, NOW() - JUSTIFY_INTERVAL(’30 DAYS 1 HOUR 2 MINUTE’) D3;
D1 D2 D3
2016-09-05 21:39:08...+04 2016-10-05 22:41:08...+04 2016-08-05 20:37:08...+04
Функция DATE_TRUNC
Функция DATE_TRUNC(timestamp) используется для обрезки да­ты или интервала (DATE_TRUNC(interval)) до определенной точно­сти.
Пример:
SELECT DATE_TRUNC(’HOUR’, NOW()) D1, DATE_TRUNC(’DAY’, NOW()) D2, DATE_TRUNC(’MONTH’, NOW()) D3;
D1 D2 D3
2016-09-05 22:00:00+04 2016-09-05 00:00:00+04 2016-09-01 00:00:00+04
Получение начала и конца месяца
Для получения дат соответствующих началу и концу месяца необходимо использовать функции DATE_TRUNC и JUSTIFY_INTERVAL.
Пример:
SELECT DATE_TRUNC(’MONTH’, NOW()) D1, DATE_TRUNC(’MONTH’, NOW())
+ JUSTIFY_INTERVAL(’1 MONTH - 1 DAY’) D2;
106
Глава 5. Дополнительные возможности 5.6. Работа с датой и временем
D1 D2
2016-09-01 00:00:00+04 2016-09-30 00:00:00+04
Данные функции также могут быть использованы для опреде-
ления количества дней в заданном месяце.
Например:
SELECT NOW() D1, TO_CHAR(DATE_TRUNC(’MONTH’, NOW())
+ JUSTIFY_INTERVAL(’1 MONTH - 1 DAY’), ’DD’) D2;
D1 D2
2016-09-05 21:51:19.727702+04 30
Функция AGE
Функция AGE([end_date, ]start_date) возвращает разницу между датами, обозначенными как end_date и start_date. Если па­раметр end_date опущен, то используется значение глобальной пе­ременной CURRENT_DATE, которая содержит текущую дату (тип date, дата без времени).
Пример:
SELECT CURRENT_DATE D1, AGE(MAKE_TIMESTAMP(2013, 7, 15, 8, 15, 23.5)) D2, AGE(MAKE_DATE(2016, 3, 3),
MAKE_TIMESTAMP(2013, 7, 15, 8, 15, 23.5)) D3;
D1 D2 D3
2016-09-05 3 years 1 mon 20 days 15:44:36.5 2 years 7 mons 18 days 15:44:36.5
В данном примере также используются функции
MAKE_TIMESTAMP и MAKE_DATE, которые возвращают значения типов timestamp и date соответственно.
Функция EXTRACT
Функция EXTRACT(field FROM timestamp) извлекает элемент да­ты field из значения типа timestamp. Также существует функ-
107
5.6. Работа с датой и временем Глава 5. Дополнительные возможности
ция EXTRACT(field FROM interval) для работы со значениями типа
interval.
Пример:
SELECT NOW() D1, EXTRACT(MONTH FROM NOW()) D2, EXTRACT(YEAR FROM NOW()) D3, EXTRACT(MINUTE FROM NOW()) D4;
D1 D2 D3 D4
2016-09-05 22:37:54.6046+04 9 2016 37
Количество месяцев между двумя датами
Функции EXTRACT, AGE и DATE_TRUNC могут быть использованы
для нахождения количества месяцев между двумя датами.
Пример:
SELECT NOW() D1, EXTRACT(MONTH FROM AGE(DATE_TRUNC(’MONTH’, NOW()),
DATE_TRUNC(’MONTH’, MAKE_DATE(2016, 3, 3)))) D2;
D1 D2
2016-09-05 22:41:08.68334+04 6
Функция TO_DATE
Функция TO_DATE(str, mask) преобразует строку str в дату.
Преобразование ведется по маске mask.
Пример:
SELECT TO_DATE(’05 Dec 2000’, ’DD Mon YYY’) D1, TO_DATE(’15.12.2000’, ’dd.mm.yy’) D2;
D1 D2
2000-12-05 2000-12-05
108
Глава 5. Дополнительные возможности 5.7. Контрольные вопросы
Функция TO_CHAR
Функция TO_CHAR(date, mask) преобразует дату date в символь­ную строку в соответствии с заданной маской.
Пример:
SELECT NOW() D1, TO_CHAR(NOW(), ’DD.MM.YY HH24:MI’) D2;
Например:
D1 D2
2016-09-05 22:49:37.044199+04 05.09.16 22:49
Некоторые форматные маски представлены в таблице 5.1. Полный список масок и их описание представлен в [6].
Таблица 5.1
Маски для форматирования даты и времени
Маска Назначение
СС Номер века YYYY, или YY Четыре или последние две цифры номе-
ра года Q Номер квартала MONTH, или MON, или MM Строковое или числовое представление
номера месяца WW Номер недели в году W Номер недели в месяце DDD Номер дня в году DD Номер дня в месяце DAY, или DY, или ID Номер дня недели HH, или HH12, или HH24 Час MI Минута

5.7 Контрольные вопросы

1. Перечислите основные функции PostgreSQL для работы с чис­лами.
2. Перечислите основные тригонометрические функции PostgreSQL.
109
5.7. Контрольные вопросы Глава 5. Дополнительные возможности
3. Перечислите основные функции PostgreSQL для работы со строками.
4. Перечислите основные функции PostgreSQL для работы с датой и временем.
110
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]