[英]Mysql Get table result between two dates
我知道我的問題與已經回答的其他問題相似,但是我的問題有所不同,因為我需要一些替代方案或建議,而無需其他方法。
我的問題是:我想根據用戶的需要在兩個日期或一個日期之間獲取值。
當用戶請求一天的數據.. php查詢數據成功..但問題是當請求的數據在兩個日期之間時。
$query = $this->db->query("SELECT * FROM `meta_receipt_data`
WHERE `meta_transaction_date` >= '$first_date' AND
`meta_transaction_date` <= '$second_date' ");
return $query->result();
我得到一個空集...
所以我認為可能是這些值未正確提交。因此我回顯了這些值以查看它們是否正確。 我發現它們是正確的...
$ first_date = 09/13/2014;
$ second_date = 2014年9月19日;
但是如果我嘗試把價值
$query = $this->db->query("SELECT * FROM `meta_receipt_data`
WHERE `meta_transaction_date` >= '09/13/2014' AND
`meta_transaction_date` <= '09/19/2014' ");
return $query->result();
我得到的結果是正確的..所以有什么地方做錯了嗎?
MySQL有一個稱為Between的內置函數,您可以像這樣使用:
SELECT * FROM table_name WHERE date_column BETWEEN 'start_date_parameter' AND 'end_time_parameter'
就是這樣,將meta_transaction_date
的類型更改為DATE
! 在傳遞DATE
時,也請使用標准的'yyyy-mm-dd'
。
您的問題可能源於美國日期格式'mm/dd/yyyy'
字符串排序,這對於編碼來說很糟糕。 如果希望以這種格式顯示DATE
,請在SELECT
最終輸出時進行轉換。
嘗試先投射日期,然后使用between
語句:
$query = $this->db->query("SELECT * FROM `meta_receipt_data`
WHERE `meta_transaction_date` BETWEEN
date_format(str_to_date('$first_date', '%d/%m/%Y'), '%Y-%m-%d') AND
date_format(str_to_date('$second_date', '%d/%m/%Y'), '%Y-%m-%d')");
$query = $this->db->query("SELECT * FROM `meta_receipt_data`
WHERE `meta_transaction_date` >= '09/13/2014'
AND `meta_transaction_date` <= '09/19/2014' ");
由於上面的方法似乎工作正常,因此問題出在您的代碼中。
$query = $this->db->query("SELECT `meta_transaction_date` FROM meta_receipt_data WHERE
meta_transaction_date BETWEEN "
.date( "Y-M-d", ( strtotime($first_date) ) )." AND "
.date( "Y-M-d", ( strtotime($second_date) ) ) );
請注意,請勿使用SELECT *
類的查詢,因為它們會降低應用程序的性能。 我只是讀了您對自己的問題的評論:
我已將類型設置為Varchar
不要那樣做。 最好使用DATE類型存儲日期。 您可以使用查詢:
ALTER TABLE `meta_receipt_data`
MODIFY `meta_transaction_date` DATE NOT NULL;`
好吧,這是假設您希望保留該列不接受空值。
我發現該值前后都有空格,因此我使用$first = trim($first_date);
問題解決了...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.