Страницы

Поиск по вопросам

суббота, 9 марта 2019 г.

Как сделать выборку по дате из текстового поля

У меня таблица в формате (поле с типом text):
+------------------+ | data | +------------------+ | 23.06.2015 10:30 | | 24.06.2015 10:45 | | 26.06.2015 12:15 | | 02.07.2015 11:24 | +------------------+
Если ищу между датами, то находит неправильно. Только если ищу по одному месяцу, допустим по июню, если ищу с июня по июль, то ничего не выводит.
Такой запрос:
mysql_query("SELECT * FROM `selling_list` WHERE `data`>'22.06.2015' AND `data`<'03.07.2015'");
выдаст пустой результат. а такой:
mysql_query("SELECT * FROM `selling_list` WHERE `data`>'22.06.2015' AND `data`<'30.06.2015'");
выдаст 3 результата.
Почему так? Как правильно сделать выборку?


Ответ

если дата в строке указана в понятном серверу mysql формате, то диапазон можно указывать, например, так:
select ... where data between "2015-06-20" and "2015-07-03";
но у вас ситуация осложняется тем, что в базе данных содержится, во-первых, строка, а не дата, а во-вторых в «непонятном» серверу формате.
значит, надо преобразовывать строку при выборке с помощью функции str_to_date, указав вторым параметром подходящий шаблон
пример (в выборку попала дата за 23 июня и не попала за 2 июля потому, что если не указано время, то оно берётся как «полночь» — 0:00:00):
SQL Fiddle
MySQL 5.6 Schema Setup
create table t (data text);
insert into t values ("23.06.2015 10:30"), ("24.06.2015 10:45"), ("26.06.2015 12:15"), ("02.07.2015 11:24");
Query 1
select * from t where str_to_date(data, "%d.%m.%Y %k:%i:%s") between "2015-06-23" and "2015-07-02"
Results
| data | |------------------| | 23.06.2015 10:30 | | 24.06.2015 10:45 | | 26.06.2015 12:15 |

Комментариев нет:

Отправить комментарий