Забывать, что DAYNAME возвращает английские названия.
1
Ошибка: неверная нумерация дней недели
В MySQL DAYOFWEEK возвращает 1 для воскресенья, а не для понедельника. Поэтому пятница — 6, а не 5.
-- Неправильно: 5 — четверг в MySQL
SELECT id, order_date FROM orders WHERE DAYOFWEEK(order_date) = 5;
-- Правильно
SELECT id, order_date FROM orders WHERE DAYOFWEEK(order_date) = 6;
-- Неправильно: отрицательные дни
SELECT DATEDIFF(order_date, shipped_date) FROM orders;
-- Правильно
SELECT DATEDIFF(shipped_date, order_date) FROM orders;
3
Ошибка: CAST(... AS VARCHAR) в MySQL
MySQL не поддерживает VARCHAR внутри CAST. Используйте CHAR.
-- Ошибка
SELECT CAST(id AS VARCHAR(10)) FROM customers;
-- Правильно
SELECT CAST(id AS CHAR(10)) FROM customers;
4
Ошибка: ожидание русских названий от DAYNAME
DAYNAME возвращает название дня на английском. Для русского языка используйте DATE_FORMAT(..., '%W') с SET lc_time_names = 'ru_RU'.
SET lc_time_names = 'ru_RU';
SELECT id, order_date, DATE_FORMAT(order_date, '%W') AS day_of_week
FROM orders;
5
Ошибка: вычитание дат как строк
Если столбец хранится как строка, арифметика с датами не сработает или даст непредсказуемый результат.
-- Опасно: order_date может быть строкой
SELECT DATEDIFF(shipped_date, order_date) FROM orders;
-- Безопаснее: привести к DATE
SELECT DATEDIFF(CAST(shipped_date AS DATE), CAST(order_date AS DATE)) FROM orders;