![]() |
![]() |
![]() |
Функции для работы с датой и временем В PostgreSQL поддерживаются как стандартные функции SQL current_date, current_time и current_timestamp, так и множество нестандартных функций. Функции PostgreSQL, предназначенные для работы с датой и временем, перечислены в табл. 5.11. Таблица 5.11. Функции для работы с датой и временем
Ниже приведены более подробные описания всех функций, перечисленных в таблице. Обратите внимание на отсутствие круглых скобок в определениях функций current_date, current_time и current_timestamp — это сделано для сохранения совместимости со стандартом SQL92. current_date Синтаксис: current_date Функция current_date вызывается без аргументов и возвращает текущую дату в виде значения типа date. Результат эквивалентен преобразованию специальной константы now к типу date. Пример booktown=# SELECT current_date, booktown-# 'now'::date AS date; date date 2001-08-31 | 2001-08-31 (1 row) current_time Синтаксис: current_time Функция current_time вызывается без аргументов и возвращает текущее время в виде значения типа time. Результат эквивалентен преобразованию специальной константы now к типу time. Пример booktown=# SELECT current_time, booktown-# 'now'::time AS time; time | time 11:36:52 | 11:36:52 (1 row) current_timestamp Синтаксис: current_timestamp Функция current_timestamp вызывается без аргументов и возвращает текущее время в виде значения типа timestamp. Результат эквивалентен преобразованию специальной константы now к типу timestamp или вызову функции now(). Пример booktown=# SELECT current_timestamp. booktown-# now() AS timestamp; timestamp | timestamp 2001-08-31 11:39:42-07 2001-08-31 11:39:42-07 (1 row) date_part() Синтаксис: date_part(s. t) date_part(s. i) Функция date_part() получает два аргумента. Первый аргумент s относится к типу text, а второй, t или I, — к типу timestamp или interval соответственно. Функция выделяет во втором аргументе компонент, определяемый строкой s, и возвращает его в виде значения типа doubl e preci si on. Чтобы лучше понять, как работает функция date_part(), представьте, что значение типа timestamp или interval делится на компоненты — часы, минуты и т. д. Эти компоненты (и соответственно допустимые значения аргумента s) перечислены в табл. 5.12. Помните, что некоторые значения относятся только к типу tlmestamp и не поддерживаются для типа Interval. Таблица 5.12. Компоненты типов timestamp и interval
Примеры booktown=# SELECT date_part('minute'. booktown(# intervalC3 days 4 hours 12 minutes')): date_part 12 (1 row) booktown=# SELECT isbn, booktown-l date_part('year', publication) booktown-# FROM editions booktown-# ORDER BY date_part ASC booktown-# LIMIT 3; isbn | date_part 0760720002 | 1868 0679803335 | 1922 0694003611 | 1947 (3 rows) ПРИМЕЧАНИЕ Аналогом функции date_part() в SQL является функция extract(). date_trunc() Синтаксис: date_trunc(s. t) Функция date_trunc () получает два аргумента s и t, относящихся к типам text и timestamp соответственно. Строка s определяет компонент, до которого усекается аргумент t. В данном контексте под усечением понимается удаление всех компонентов, детализация которых превышает заданную. Допустимые значения аргумента s перечислены в табл. 5.12. Пример booktown=# SELECT date_trune('minute', now()); date trunc 2001-08-31 09:59:00-07 (1 row) booktown=# SELECT date_trunc( 'hour', now()); date trunc 2001-08-31 09:00:00-07 (1 row) booktown=# SELECT date_trunc('year', now()); date trunc 2001-01-01 00:00:00-08 (1 row) extract() Синтаксис: extract(k FROM t) extract(k FROM 1) Функция SQL92 extractO представляет собой аналог функции PostgreSQL date_part() со слегка измененным синтаксисом. При перечислении аргументов вместо запятой используется ключевое слово FROM. Аргументы аналогичны аргументам функции date_part(), хотя первый аргумент является ключевым словом SQL, а не строкой и поэтому не заключается в кавычки. Допустимые значения k перечислены в табл. 5.12. Учтите, что функция extractO является «псевдонимом» функции PostgreSQL date_part () в синтаксисе SQL92, поэтому по умолчанию в выходных данных функция extract() представляется именем date_part. Примеры booktown=# SELECT extract(MINUTE FROM interval('3 days 12 minutes1)): datejpart 12 (1 row) booktown=# SELECT extractCMONTH FROM now()): date_part 8 (1 row) isfinite() Синтаксис: isfinite(t) isfinite(i) Функция 1 sf 1 ni te() получает один аргумент типа timestamp или 1 interval. Она возвращает true, если переданное значение не является бесконечным, созданным при помощи специальной константы Infinity или invalid (используется только для timestamp). Пример booktown=# SELECT isfinite('now'::timestamp) AS now_is_finite, booktown-# isfinite('infinity'::timestamp) AS Infinity, booktown-# isfiniteC'invalid'::timestamp) AS invalid; now_is_finite | infinity | invalid (1 row) now() Синтаксис: now() Функция now() вызывается без аргументов и возвращает текущую дату и время в виде значения типа timestamp. Пример booktown=# SELECT now(); now 2001-08-31 10:31:18-07 (1 row) timeofday() Синтаксис: timeofdayO Функция timeofday() вызывается без аргументов и возвращает текущие время и дату. Она похожа на функцию now(), но возвращает значение типа text. Это делает ее менее удобной, поскольку значение не разделяется на компоненты функциями date_part() и to_char() без предварительного преобразования к другому типу. Пример Dooktown=# SELECT timeofday(); timeofday Fn Aug 31 10:33:00.837338 2001 PDT (1 row) |
![]() |
![]() |
![]() |