Страницы

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

воскресенье, 12 января 2020 г.

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

#php #mysql


У меня таблица в формате (поле с типом 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 результата.

Почему так? Как правильно сделать выборку?
    


Ответы

Ответ 1



если дата в строке указана в понятном серверу 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 |

Ответ 2



Надеюсь, поможет: SELECT * FROM selling_list WHERE date BETWEEN STR_TO_DATE('22.06.2015', '%d/%m/%Y') AND STR_TO_DATE('30.06.2015', '%d/%m/%Y')

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

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