Задать вопрос
@Triglav77

Как правильно преобразовать text в дату?

Есть таблица в которой время забито как text и имеет формат "01.12.2019" (делали до меня)

Нужно сделать BETWEEN за интервал

Пытался сделать так

SELECT * FROM order_kassa WHERE DOC_TIME BETWEEN DATE_FORMAT("01.11.2019",'%d.%m.%Y') and DATE_FORMAT("20.11.2019",'%d.%m.%Y')


но не выходит
  • Вопрос задан
  • 3089 просмотров
Подписаться 2 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 3
@alexalexes
Используйте STR_TO_DATE() вместо DATE_FORMAT, атрибута DOC_TIME это тоже касается.
PS: Использование этого поля без функции преобразования для операций сравнения не имеет смысла. В этом преступление предыдущего разработчика, выбравшего не тот тип данных.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT DATE_FORMAT("01.11.2019",'%d.%m.%Y');

20.11.2001
Ничего не смущает? Функция DATE_FORMAT нужна для перевода даты, записанной в стандартном для MySQL формате год-месяц-день, в другое представление. Вы же подаёте ей на вход дату в формате день-месяц-год.
Для перевода даты из произвольного формата в стандартный нужна функция STR_TO_DATE(), с указанием, из какого формата переводится дата.
Ответ написан
Комментировать
erge
@erge
Примус починяю
как писал @alexalexes
Необходимо строку doc_time функцией STR_TO_DATE преобразовать в дату, а уже ее сравнивать с интервалом дат в BETWEEN

SELECT *
  FROM order_kassa
  WHERE str_to_date(doc_time, '%d.%m.%Y') BETWEEN '2019-11-01' AND '2019-11-20';


см. пример - https://dbfiddle.uk/?rdbms=mysql_5.6&fiddle=cde3b3...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы