PostgreSQL - Функции и операторы даты/времени

Привет, будущие программисты! Сегодня мы отправимся в увлекательное путешествие по миру дат и времени в PostgreSQL. Как ваш доброжелательный учитель информатики, я здесь, чтобы провести вас через эти концепции с тем же энтузиазмом, который я испытывал на протяжении последних 15 лет в classroom. Так что достаньте свои виртуальные блокноты и погружайтесь с мной!

Date/Time Functions & Operators

Понимание дат и времени в PostgreSQL

Прежде чем мы начнем исследовать функции и операторы, давайте на минутку停 чтобы понять, почему даты и время так важны в программировании. Представьте, что вы создаете машину времени (не было бы здорово?). Вам нужно знать exactly когда вы находитесь и куда (или когда) вы хотите отправиться. Это essentially то, что мы делаем с базами данных - мы отслеживаем, когда происходят собыya, как долго они длятся и даже предсказываем будущие собыya.

Теперь давайте посмотрим на некоторые из самых полезных функций и операторов дат и времени в PostgreSQL.

Функция AGE(timestamp, timestamp) и AGE(timestamp)

Функция AGE похожа на того друга, который всегда помнит, как давно что-то произошло. Она calculates разницу между двумя timestamp или между timestamp и текущей датой.

Пример 1: Вычисление возраста

SELECT AGE(TIMESTAMP '2023-05-15', TIMESTAMP '1990-01-01');

Это вернет что-то вроде:

33 years 4 months 14 days

Что здесь происходит? Мы просим PostgreSQL вычислить разницу во времени между 1 января 1990 года и 15 мая 2023 года. Это как если бы мы спрашивали: "Каков возраст человека, родившегося 1 января 1990 года?"

Пример 2: Вычисление возраста от текущей даты

SELECT AGE(TIMESTAMP '1990-01-01');

Это вернет разницу между 1 января 1990 года и текущей датой. Это как если бы мы спрашивали: "Каков возраст человека, родившегося 1 января 1990 года?"

Функции CURRENT DATE/TIME

Эти функции как内置ные часы и календарь вашей базы данных. Они tell вас, какое время сейчас.

Пример 3: Получение текущей даты и времени

SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;

Это вернет сегодняшнюю дату, текущее время и оба значенияcombined. Это как если бы вы спрашивали свою базу данных: "Какой сегодня день, какое время и какое точное время сейчас?"

Функции DATE_PART и DATE_TRUNC

DATE_PART как бы увеличил масштаб времени, чтобы сосредоточиться на конкретных частях даты или времени. DATE_TRUNC, с другой стороны, как упрощает время - он округляет до specified единицы времени.

Пример 4: Извлечение частей даты

SELECT DATE_PART('year', TIMESTAMP '2023-05-15 10:30:00');
SELECT DATE_PART('hour', TIMESTAMP '2023-05-15 10:30:00');

Первый запрос вернет 2023, а второй - 10. Это как если бы мы спрашивали: "Из какого года этот timestamp?" и "Какой час дня это timestamp?"

Пример 5: Округление timestamp

SELECT DATE_TRUNC('hour', TIMESTAMP '2023-05-15 10:30:00');

Это вернет '2023-05-15 10:00:00'. Это как если бы мы говорили: "Дайте мне этот timestamp, но сбросьте минуты и секунды до нуля."

Функция EXTRACT

EXTRACT аналогичен DATE_PART, но с немного другой синтаксис. Это еще один способ извлечь конкретные части даты или времени.

Пример 6: Извлечение из timestamp

SELECT EXTRACT(YEAR FROM TIMESTAMP '2023-05-15 10:30:00');
SELECT EXTRACT(HOUR FROM TIMESTAMP '2023-05-15 10:30:00');

Эти запросы вернут 2023 и 10 соответственно, как и наши примеры DATE_PART.

Функции ISFINITE

Эти функции как бы проверяют реальность вашей базы данных. Они tell вас, является ли дата, timestamp или интервал реальным конечным значением или одним из специальных значений бесконечности.

Пример 7: Проверка конечности

SELECT ISFINITE(DATE '2023-05-15');
SELECT ISFINITE(TIMESTAMP 'infinity');

Первый запрос вернет true, а второй - false. Это как если бы мы спрашивали: "Является ли 15 мая 2023 года реальной датой?" (да) и "Является ли 'бесконечность' реальным timestamp?" (нет).

Функции JUSTIFY

Эти функции как бы корректируют время вашей базы данных. Они принимают интервалы, которые могут иметь странные значения, и корректируют их до более стандартных представлений.

Пример 8: Корректировка интервалов

SELECT JUSTIFY_DAYS(INTERVAL '30 days');
SELECT JUSTIFY_HOURS(INTERVAL '36 hours');
SELECT JUSTIFY_INTERVAL(INTERVAL '1 month 36 hours');

Эти могут вернуть:

1 month
1 day 12 hours
1 month 1 day 12 hours

Это как если бы мы говорили: "Возьмите эти временные промежутки и выразите их более стандартным образом."

Обзор функций

Вот удобная таблица, резюмирующая все функции, о которых мы говорили:

Функция Описание
AGE() Вычисляет разницу между timestamp
CURRENT_DATE Возвращает текущую дату
CURRENT_TIME Возвращает текущее время
CURRENT_TIMESTAMP Возвращает текущую дату и время
DATE_PART() Извлекает конкретную часть даты/времени
DATE_TRUNC() Округляет timestamp до specified точности
EXTRACT() Извлекает конкретное поле из даты/времени
ISFINITE() Проверяет, является ли дата/время/интервал конечным
JUSTIFY_DAYS() Корректирует дни в интервале
JUSTIFY_HOURS() Корректирует часы в интервале
JUSTIFY_INTERVAL() Корректирует весь интервал

И вот оно, folks! Мы вместе путешествовали через время (функции), извлекали части дат, проверяли конечность бесконечности и даже корректировали интервалы. Помните, работа с датами и временем в базах данных важна для многих приложений, от отслеживания активности пользователей до планирования событий.

Пока вы продолжаете свое программирование путешествие, вы найдете эти функцииочень полезными. Они как швейцарский армейский нож для работы с временем в вашем наборе инструментов для работы с базами данных. Продолжайте практиковаться, продолжайте исследовать, и вскоре вы станете лордом времени в мире баз данных!

Credits: Image by storyset