работаю инженером данных и пишу в основном про это.
Профильные ссылки с коротким резюме (статьи, доклады, подкасты), иногда «софтовое» — например, про поиск работы.
Post #246
1.67K
data будни Хочешь научиться — попробуй научить В этот раз я решил не записываться студентом на новый курс от Практикума (двух, пожалуй, хватит). Вместо этого зашёл с «черного хода» и записался туда ревьюером — буду проверять домашки у студентов. С уважением и немного…
Сравнение даты и строки в Postgres
Первый «улов» с поля проверок заданий студентов на курсе по DE. Коллега-ревьюер заметил, что у студента в работе теряются часть записей, когда в SQL запросе идёт проверка даты и строки:
Короткий поиск подкинул вопрос со StackOverflow. Оказывается, чтобы сравнить время со строкой, под капотом Постгрес приводит строку ко времени; тогда он наивно из ‘2022-04-03’ получается '2022-04-03 00:00:00’, то есть начало суток, а не конец, как ожидалось.
Посмотреть подкапотную логику можно, прогнав запрос через EXPLAIN, там будет такая строка:
Как решение предлагают в запросах явно приводить дату-время к дате перед сравнением со строкой
тогда под капотом будет сравнение дат с ожидаемым результатом:
———
Продолжение: Олег Юрьев проверил через EXPLAIN
Stack Overflow How to compare dates in datetime fields in Postgresql? I have been facing a strange scenario when comparing dates in postgresql(version 9.2.4 in windows).
I have a column in my table say update_date with type timestamp without timezone. Client can sea... Первый «улов» с поля проверок заданий студентов на курсе по DE. Коллега-ревьюер заметил, что у студента в работе теряются часть записей, когда в SQL запросе идёт проверка даты и строки:
<..>
WHERE created <= '2022-04-03' Короткий поиск подкинул вопрос со StackOverflow. Оказывается, чтобы сравнить время со строкой, под капотом Постгрес приводит строку ко времени; тогда он наивно из ‘2022-04-03’ получается '2022-04-03 00:00:00’, то есть начало суток, а не конец, как ожидалось.
Посмотреть подкапотную логику можно, прогнав запрос через EXPLAIN, там будет такая строка:
Filter: (created <= '2022-04-03 00:00:00'::timestamp without time zone)
Как решение предлагают в запросах явно приводить дату-время к дате перед сравнением со строкой
WHERE created::date <= '2022-04-03' тогда под капотом будет сравнение дат с ожидаемым результатом:
Filter: ((сreted)::date <= '2022-04-03'::date)
———
Продолжение: Олег Юрьев проверил через EXPLAIN
- 👍 13