#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')
Комментариев нет:
Отправить комментарий