У меня таблица в формате (поле с типом 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 |
Комментариев нет:
Отправить комментарий