[英]MYSQL date range query strange behaviour
我正在开发codeigniter和mysql db。 我遇到了一个问题,需要按日期显示最新数据。
我的表名称是tbl_tournament,我将在其中获取其tournament_end_date >= $todays_date
锦标赛数据
我的查询
$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();
该查询的输出为空数组array();
当我在数据库中手动更改tournament_end_date_time = 01/04/2018
并查询$this->db->where('tournament_end_date_time >=', '01/04/2017');
我得到结果。 但是当我在查询中将日期更改为$this->db->where('tournament_end_date_time >=', '31/12/2017');
我得到空数组。
在Mysql数据库中,我已经使用varchar作为数据类型tournament_end_date_time
预先感谢。
您将日期时间存储为字符串(具有VARCHAR
类型),因此将它们作为字符串进行比较-逐字符。 出于明显的原因,“ 3”字符大于“ 1”。 这就是为什么要设置过滤器...
WHERE tournament_end_date_time >= '31/12/2017'
...您将只获得相应值从'31 / 12'开始的结果-换句话说,就是12月31日(2017年-或之后的任何一年)。
要解决该问题,可以使用STR_TO_DATE() MySQL函数将现有的列值转换为实际日期。 请注意,该参数将被视为日期文字,因为它遵循“ YYYY-MM-DD”格式:
WHERE STR_TO_DATE(tournament_end_date_time, '%d/%m/%Y') >= '2017-12-31'
...,或者使用PHP语法遵循CodeIgniter约定:
$this->db->where(array(
"STR_TO_DATE(tournament_end_date_time, '%d/%m/%Y') >=" => date("Y-m-d")
));
更好的选择是对此列执行一次一次性更新操作,以一次将其所有值转换为DATE
类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.