~={yellow}Форматирование даты и времени=~ ```sql --- Создаем таблицу с полем timestamp create table log( log_id bigint generated always as identity, created_at timestamp not null default current_timestamp, message text not null ); -- Добавляем данные insert into log (message) values ('Произошло страшное: сломался прием платежа'), ('Трындец с отправкой почты, похоже, почтовый сервер недоступен!'), ('Ужас, все работает!'); -- Забиарем данные в нужном формате timestamp select to_char(created_at, 'DD.MM.YYYY HH24:MI:SS') as "дата инцидента", message as "сообщение" from log; ``` ~={yellow}Правильная вставка timestamp с явным указанием формата=~ ```sql insert into log (created_at, message) values (to_timestamp('31.07.2024 20:19:51', 'DD.MM.YYYY HH24:MI:SS'), 'Произошло страшное: сломался приём платежа #1128'), (to_timestamp('31.07.2024 17:19:52', 'DD.MM.YYYY HH24:MI:SS'), 'Трындец с отправкой почты, похоже, почтовый сервер недоступен!'), (to_timestamp('31.07.2024 17:20:53', 'DD.MM.YYYY HH24:MI:SS'), 'Ужас, всё работает!'); ``` Выборка данных только за текущей месяц ```sql -- Хорошо заходит функция trunc select * from log where date_trunc('month', created_at)=date_trunc('month', current_timestamp) order by log_id; ``` Выборка данных за последнюю неделю ```sql select * from log where created_at >= current_date - interval '7 days' order by created_at; ``` Удалить данные из таблицы, добавленные более чем 30 дней назад. ```sql delete from log where created_at < current_date - interval '30 days'; ``` Работа с интервалами. Прибавить месяц. ```sql select '2024-01-31'::date + '1 month'::interval; ``` Форматированный вывод timestamp ```sql select to_char(start, 'DD.MM.YYYY') start, to_char(finish, 'DD.MM.YYYY') finish, extract(days from finish - start) delta_in_days from records order by start, finish; ``` Примем использования age() - вывод дельты ```sql select to_char(start, 'DD.MM.YYYY') start, to_char(finish, 'DD.MM.YYYY') finish, age(finish, start) delta from records order by start, finish; ``` Еще один пример выборки по дате ```sql select email from employees where extract('month' from birthday)=4 order by email; ```