В таблице событий поле event_date_text хранит дату как текст в формате YYYY-MM-DD. Вы хотите фильтровать строки за прошлую неделю и группировать по неделе. Что логичнее всего сделать в запросе?

AСравнивать строки напрямую и использовать LIKE '2025-12-%' для группировки по периоду
BПривести к типу даты: CAST(event_date_text AS date) или event_date_text::date для функций дат
CИспользовать EXTRACT(week FROM event_date_text) напрямую от строки, не приводя к date
DЗаменить дефисы в строке через REPLACE(event_date_text, '-', '') для последующей работы
Правильный ответ. Если дальше нужны операции с датами, лучше явно привести текст к типу date, а не оставлять строкой.

Разбор

Даже если строковые даты иногда сравниваются «правильно», это всё равно строковый тип: функции дат, группировки по периодам и проверки корректности формата становятся ненадёжными. Явный каст в date через CAST(... AS date) или ... ::date делает логику запроса прозрачной и позволяет использовать DATE_TRUNC, EXTRACT и арифметику дат. Сравнение строк через LIKE хрупко к смене формата, а EXTRACT напрямую от текста не работает в большинстве СУБД.

Проверь себя · 1/3разбор после ответа
В таблице products код товара хранится как текст, например 00123 (важны ведущие нули). Вы хотите соединить её с catalog(code) (тоже текст). Какое действие чаще всего приводит к багу и пропущенным совпадениям?
Тренировать SQL в Telegram

Ещё вопросы по теме «Строки и приведение типов»