Уменьшение даты на 1 день в PostgreSQL: работа с timestamp
Быстрый ответ
Если вам нужно вычесть один день из значения timestamp, используйте операцию - INTERVAL
:
SELECT your_timestamp_column – INTERVAL '1 day' FROM your_table;
В данном случае your_timestamp_column
и your_table
— это имена вашего столбца с временем и таблицы соответственно. Этот запрос вернёт откорректированные временные метки.
Манипуляции с метками времени в различных сценариях
Случай 1: Определение последнего дня текущего месяца
Вы можете определить последний день текущего месяца, используя функцию date_trunc
:
-- Теперь вы всегда будете знать, когда наступит конец месяца
SELECT (date_trunc('MONTH', CURRENT_DATE) + INTERVAL '1 MONTH – 1 day')::DATE AS last_day_of_month;
Случай 2: Создание динамических временных интервалов
Для создания динамических интервалов времени применяйте функцию make_interval
:
-- Изучение времени теперь станет еще проще
SELECT CURRENT_TIMESTAMP – make_interval(days => 1);
Случай 3: Фильтрация записей за предыдущие дни
Можно отфильтровать записи по датам за предыдущие дни, используя временные интервалы. Если нужно "вернуться" на 130 дней назад:
-- Просто посмотрим, что было 130 дней назад
SELECT * FROM your_table WHERE your_timestamp_column >= now() – INTERVAL '130 days';
Визуализация
Можно представить процесс вычитания одного дня из временой метки как переход на одну страницу календаря назад:
До: [📅📅📅📅**📆**📅📅📅] # Мы обозначили текущую дату
SELECT your_timestamp_column – INTERVAL '1 day' AS adjusted_timestamp FROM your_table;
После: [📅📅📅**📅**📆📅📅📅] # И вот мы вернулись на день назад
Здесь 📆 символизирует текущую дату, и мы благодаря коду словно вернулись на день назад.
Советы по усовершенствованию написания SQL-запросов
Даты без учета времени
Если вам необходима только дата без временных меток, выполните следующую команду:
-- Выводятся только даты, время не учитывается
SELECT (your_timestamp_column – INTERVAL '1 day')::DATE FROM your_table;
Группировка данных для анализа временных трендов
Пользователь может воспользоваться группировкой и агрегацией данных для изучения временных трендов, с использованием функции COUNT
:
-- Оценка изменений во времени
SELECT
(your_timestamp_column::DATE – INTERVAL '1 day') AS date_only,
COUNT(*)
FROM your_table
GROUP BY date_only;
Вчера и завтра в PostgreSQL
В PostgreSQL очень просто получить дату вчерашнего и завтрашнего дня:
-- Заглянем в прошлое и будущее
SELECT 'yesterday'::TIMESTAMP, 'tomorrow'::TIMESTAMP;
Правильный синтаксис и использование данных — ключ к успеху
Важно выбрать верный тип данных и соблюдать синтаксис для корректного выполнения запроса:
-- Вот у нас и получается дата вчерашнего дня
SELECT now()::DATE – 1;
Полезные материалы
- PostgreSQL: Документация: 9.9. Функции и операторы,d работающие с датой и временем
- DATEADD (Transact-SQL) – SQL Server
- MySQL: Руководство по MySQL 8.0: 12.7 Функции для работы с датами и временем
- SQLite: Функции для работы с датами и временем
- Stack Overflow: Создание, хранение и использование значений времени
- Трансакт-SQL: Типы данных для даты и времени и соответствующие функции – SQL Server