簡體   English   中英

MYSQL日期范圍查詢奇怪的行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM