Колонка created_at имеет тип timestamptz. Как получить дату события в UTC (тип date), чтобы результат не зависел от таймзоны сессии?
A
created_at::date: приведение к date без явной таймзоны опирается на текущие настройки сессииB
(created_at AT TIME ZONE 'UTC')::date: явный перевод момента в UTC и затем отбрасывание времени до датыC
DATE_TRUNC('day', created_at)::date: округление по таймзоне сессии и приведение timestamptz к типу dateD
(created_at AT TIME ZONE 'Europe/Moscow')::date: перевод момента в московское время с приведением к dateПравильный ответ. Приведение
timestamptz к date зависит от таймзоны сессии; для UTC сначала используйте AT TIME ZONE 'UTC'.Разбор
Когда вы делаете created_at::date, PostgreSQL сначала переводит timestamptz в локальное время таймзоны сессии, затем отбрасывает время. Чтобы получить UTC-дату, явно переведите момент времени в UTC: (created_at AT TIME ZONE 'UTC')::date. Вариант с Europe/Moscow даст московскую дату, а DATE_TRUNC без явной таймзоны имеет ту же проблему, что и обычный каст.
Проверь себя · 1/3разбор после ответа
В таблице
events(created_at) нужно выбрать события за последние 7 дней с точностью до текущего момента (включая сегодняшние, ещё не завершённые сутки). Какое условие в WHERE корректнее?Ещё вопросы по теме «Даты и время»
- В таблице `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)`?
- Все вопросы по «Даты и время» →