Нужно получить колонку event_date типа date из created_at (тип timestamp) для JOIN с календарной таблицей по дате. Какое выражение подойдёт лучше всего?

Acreated_at::date: прямое приведение timestamp к типу date для джойна с календарём
BDATE_TRUNC('day', created_at): обрезает время до начала дня, но возвращает значение типа timestamp
CEXTRACT(DAY FROM created_at): возвращает только число месяца как целое число int
DDATE_TRUNC('month', created_at)::date: округляет дату до начала месяца с приведением к date
Правильный ответ. Если нужен именно тип date, используйте приведение created_at::date.

Разбор

DATE_TRUNC('day', created_at) даёт начало дня, но возвращает timestamp, и для джойна потребуется дополнительное приведение. EXTRACT(DAY FROM ...) возвращает только число месяца, а DATE_TRUNC('month', ...) округляет до начала месяца, что меняет смысл ключа. Для джойна с календарём, где ключ обычно типа date, удобнее сразу получить created_at::date.

Проверь себя · 1/3разбор после ответа
Нужно получить колонку event_date типа date из created_at (тип timestamp) для JOIN с календарной таблицей по дате. Какое выражение подойдёт лучше всего?
Тренировать SQL в Telegram

Ещё вопросы по теме «Даты и время»