получить данные больше, чем равно сегодняшней дате

#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

https://www.php.net/manual/de/function.date.php

Ответ №3:

Вы можете просто попробовать CURDATE() :

 SELECT * 
FROM tbl_reservation_info 
WHERE ri_id !='' AND status = 'Success' AND  ri_arrival_date > CURDATE();
  

При этом пропускается сегодняшняя дата. если вы хотите, чтобы они добавляли >=

Убедитесь ri_arrival_date , что это date формат.