SELECT *
FROM `reg`
WHERE registration_date
BETWEEN '29 /01 /15'
AND '30 /01 /15'
我使用這個查詢從數據庫中提取數據,它給我的數據中獲取數據,但是當我改變的日期,例如BETWEEN '29/01/15' AND '06/03/15'
,它顯示沒有什麼。
我正在使用數據類型varchar
。如何從數據庫中按日期使用PHP MySQL的
誰能幫我解決這個問題?
SELECT *
FROM `reg`
WHERE registration_date
BETWEEN '29 /01 /15'
AND '30 /01 /15'
我使用這個查詢從數據庫中提取數據,它給我的數據中獲取數據,但是當我改變的日期,例如BETWEEN '29/01/15' AND '06/03/15'
,它顯示沒有什麼。
我正在使用數據類型varchar
。如何從數據庫中按日期使用PHP MySQL的
誰能幫我解決這個問題?
用途,其中在表日期條件如下作爲被保存在「YMD」格式:
WHERE registration_date BETWEEN '2015-01-29' AND '2015-01-30'
我用這個麻煩,但這種情況在日期數據類型的作品,我使用varchar數據類型 –
沒有ü檢查存儲的數據是哪種格式?例如。它可能是這種格式'2015-11-18 11:26:13'或者它可以是簡單的格式,沒有時間'2015-11-18'。所以查詢可能會影響結果。 – chirag
從MySQL手冊:
日期類型用於值與日期的一部分,但沒有時間部分。
MySQL的檢索並在 'YYYY-MM-DD' 格式顯示DATE值。
的支持範圍爲「1000年1月1日」到「9999-12-31」。
您需要更改格式您用於日期。
嘗試
SELECT * FROM reg WHERE registration_date BETWEEN '2015-01-29' AND '2015-01-30'
這裏是你的解決方案,我也用這些方法來獲得使用最新數據,請您嘗試一下mayhelp你: -
$start = date('Y-m-d H:i:s', strtotime('29-01-2015'));
$end = date('Y-m-d H:i:s', strtotime('30-01-2015'));
SELECT *
FROM `reg`
WHERE registration_date >= $start AND
registration_date <= $end;
解決了你的問題? –
是的,但你被串在十六進制編碼的前一個月,然後一天,這是很好的比較,與去年的話,但他的數據庫存儲日期一天,然後再每月今年這樣比較十六進制編碼將失敗。您需要在表格中將其日期字符串轉換爲年/月/日,然後才能在/之間使用十六進制代碼技巧,並且如果*將正確*這樣做。我的解決方案更好,因爲它使用了堅實的邏輯。 – Ultimater
其實你正在使用的數據鍵入Varchar
所以它會介於和之間並不行。它顯示你的結果,因爲它與二進制數字相比,所以它顯示了你在兩個二進制數字之間的結果。您需要將您的數據類型更改爲日期和時間。
您所查詢的唯一的作品,因爲BETWEEN /對你來說只是檢查字符串中使用的字符的是十六進制編碼彼此之間。您也將獲得一個結果:
SELECT * FROM `reg` WHERE registration_date BETWEEN '29/dur' AND '30/3.13159'
但是,如果你想對待你的查詢關鍵詞,比如實際日期,我建議使用:
SELECT * FROM `reg`
WHERE str_to_date(registration_date,'%d/%m/%Y')
BETWEEN
str_to_date('29/01/15','%d/%m/%Y') AND str_to_date('30/01/15','%d/%m/%Y')
在這裏展示你是如何存儲在日期表 –
要麼使用日期數據類型存儲日期或不以RDBMS – Strawberry