#php #mysql #codeigniter #codeigniter-3
#php #mysql #codeigniter #codeigniter-3
Вопрос:
Я хочу получить все данные с сегодняшней даты (или больше, чем равно сегодняшней дате). Но он показывает всю дату до и после сегодняшней даты. Смотрите изображения ниже:
Мой запрос на выборку : SELECT * FROM tbl_reservation_info WHERE ri_id !='' AND status = 'Success' AND ri_arrival_date > '08-Apr-2019'
Комментарии:
1. Попробуйте это: ВЫБЕРИТЕ * ИЗ tbl_reservation_info, ГДЕ ri_id !=» И статус = «Успех» И ДАТА (ri_arrival_date) >= ДАТА (’08-Apr-2019′)
2. Если для вашего столбца установлено значение VARCHAR, то вы, вероятно, сравниваете строки, а не дату. Пожалуйста, преобразуйте свой столбец в тип date в MySQL, если его нет
3. Ваш столбец не имеет типа ДАТЫ. Вам нужно отформатировать его как дату, чтобы сравнение работало.
Ответ №1:
Ваши даты не указаны в допустимом формате даты MySQL (столбец предположительно a VARCHAR
или аналогичный) и сравниваются как строки. Поскольку все ваши даты начинаются с 1
, 2
, или 3
, все они больше (используя сравнение строк) строки даты, начинающейся с 0
. Вам необходимо преобразовать форматы для правильного сравнения:
SELECT *
FROM tbl_reservation_info
WHERE ri_id !=''
AND status = 'Success'
AND STR_TO_DATE(ri_arrival_date, '%d-%b-%Y') > STR_TO_DATE('08-Apr-2019', '%d-%b-%Y')
Комментарии:
1. понял суть и спасибо @nick, он работает правильно. На самом деле, мой тип поля даты
varchar
Ответ №2:
Обычно дата сохраняется в следующем формате: ГГГГ-ММ-ДД Возможно, ваш php-администратор отформатирует его таким образом или
вы должны изменить его с varchar / text на date, иначе сортировка и фильтрация будут сложными. Также ваш код должен использовать этот формат — для отображения вам нужно его преобразовать.
На вашем скриншоте 12 больше, чем 8, которые вы фильтруете.
12-Mar-2019 > 8*
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-type-overview.html
Ответ №3:
Вы можете просто попробовать CURDATE()
:
SELECT *
FROM tbl_reservation_info
WHERE ri_id !='' AND status = 'Success' AND ri_arrival_date > CURDATE();
При этом пропускается сегодняшняя дата. если вы хотите, чтобы они добавляли >=
Убедитесь ri_arrival_date
, что это date
формат.