Нужно получить колонку event_date типа date из created_at (тип timestamp) для JOIN с календарной таблицей по дате. Какое выражение подойдёт лучше всего?
A
created_at::date: прямое приведение timestamp к типу date для джойна с календарёмB
DATE_TRUNC('day', created_at): обрезает время до начала дня, но возвращает значение типа timestampC
EXTRACT(DAY FROM created_at): возвращает только число месяца как целое число intD
DATE_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 с календарной таблицей по дате. Какое выражение подойдёт лучше всего?Ещё вопросы по теме «Даты и время»
- В таблице `events(user_id, created_at)` поле `created_at` имеет тип отметки времени с долями секунд. Как корректно посчитать количество событий по дням?
- Есть таблица `orders(created_at, amount)`, где `created_at` имеет тип `timestamp`. Как посчитать выручку по месяцам?
- В таблице `events(created_at)` нужно выбрать события за последние 7 дней с точностью до текущего момента (включая сегодняшние, ещё не завершённые сутки). Какое условие в `WHERE` корректнее?
- Как получить начало текущей недели (недельный бакет) по текущей дате в PostgreSQL?
- Колонка `created_at` имеет тип `timestamp`. Какой тип данных вернёт `DATE_TRUNC('day', created_at)`?
- Все вопросы по «Даты и время» →