Функция strftime() в SQLite: форматирование дат и группировка
strftime(формат, дата) — функция SQLite для форматирования даты по строке-шаблону: %Y — год, %m — месяц, %d — день, %w — день недели, %H — час. В SQLite нет date_trunc и EXTRACT, поэтому strftime заменяет обе: strftime('%Y-%m', d) группирует по месяцам, а strftime('%w', d) достаёт день недели.
strftime всегда возвращает строку, а не число: strftime('%m', d) даёт '03', а не 3 — при сортировке или сравнении с числом приводи через CAST. День недели %w нумерует с воскресенья = 0 (как EXTRACT(DOW) в PostgreSQL, но не как ISO). И strftime работает только с датами в формате ISO (YYYY-MM-DD) — на «01.03.2026» вернёт NULL.
Где спрашивают на собеседовании
strftime — рабочая лошадка дат в SQLite и в этом тренажёре. Задачи «выручка по месяцам», «активность по дням недели», «когорты по неделям» на SQLite решаются через strftime, а на PostgreSQL — через date_trunc/EXTRACT.
FAQ: частые вопросы про strftime
Как сгруппировать по месяцам в SQLite?
strftime('%Y-%m', дата) вернёт строку вида «2026-01», по которой и группируй через GROUP BY. Это SQLite-аналог date_trunc('month', …) из PostgreSQL.
Как получить день недели в SQLite?
strftime('%w', дата) вернёт '0'..'6', где 0 это воскресенье. Результат строковый, для арифметики приводи через CAST(… AS INTEGER).
Почему strftime возвращает NULL?
Скорее всего дата не в формате ISO (YYYY-MM-DD). SQLite понимает только этот формат; строки вроде «01.03.2026» дадут NULL — сначала приведи их к ISO.