简体   繁体   中英

MYSQL date range query strange behaviour

i'm working on codeigniter and mysql db. I have run in to a issue where i need to show recent data as per date.

i have table name tbl_tournament where i'm going to fetch tournament data whose tournament_end_date >= $todays_date

My Query

$today = date("d/m/Y");

        $this->db->select('*');

        $this->db->from('tbl_tournament');

        $this->db->where('is_deleted', FALSE);

        $this->db->where('tournament_end_date_time >=', $today);

        $this->db->order_by('tournament_start_date_time');

        $query = $this->db->get();

        return $query->result_array();

the output of this query is empty array array();

When i manually change tournament_end_date_time = 01/04/2018 in database and query $this->db->where('tournament_end_date_time >=', '01/04/2017'); i get results. But when i change date in query as $this->db->where('tournament_end_date_time >=', '31/12/2017'); i get empty array.

In Mysql database i have used varchar as the data type tournament_end_date_time

Thank in Advance.

You store datetimes as strings (with VARCHAR type), hence they're compared as strings - character by character. For obvious reasons, '3' character is greater than '1'. That's why with filter set...

WHERE tournament_end_date_time >= '31/12/2017'

... you'll only get the results where corresponding values start from '31/12' - in other words, of December, 31 (of 2017 - or any year after it).

To solve the problem, you can use STR_TO_DATE() MySQL function to convert the existing column value to an actual date. Note that the param will be treated as a date literal as it follows 'YYYY-MM-DD' format:

WHERE STR_TO_DATE(tournament_end_date_time, '%d/%m/%Y') >= '2017-12-31'

... or, in PHP syntax, following CodeIgniter conventions:

$this->db->where(array(
  "STR_TO_DATE(tournament_end_date_time, '%d/%m/%Y') >=" => date("Y-m-d")
));

A better choice is doing a single-time update operation on this column to convert all its values to DATE type at once.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM