2015-12-03 77 views
-1
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的

誰能幫我解決這個問題?

+1

在這裏展示你是如何存儲在日期表 –

+1

要麼使用日期數據類型存儲日期或不以RDBMS – Strawberry

回答

0

用途,其中在表日期條件如下作爲被保存在「YMD」格式:

WHERE registration_date BETWEEN '2015-01-29' AND '2015-01-30' 
+0

我用這個麻煩,但這種情況在日期數據類型的作品,我使用varchar數據類型 –

+0

沒有ü檢查存儲的數據是哪種格式?例如。它可能是這種格式'2015-11-18 11:26:13'或者它可以是簡單的格式,沒有時間'2015-11-18'。所以查詢可能會影響結果。 – chirag

2

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' 
0

這裏是你的解決方案,我也用這些方法來獲得使用最新數據,請您嘗試一下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; 
+0

解決了你的問題? –

+0

是的,但你被串在十六進制編碼的前一個月,然後一天,這是很好的比較,與去年的話,但他的數據庫存儲日期一天,然後再每月今年這樣比較十六進制編碼將失敗。您需要在表格中將其日期字符串轉換爲年/月/日,然後才能在/之間使用十六進制代碼技巧,並且如果*將正確*這樣做。我的解決方案更好,因爲它使用了堅實的邏輯。 – Ultimater

0

其實你正在使用的數據鍵入Varchar所以它會介於和之間並不行。它顯示你的結果,因爲它與二進制數字相比,所以它顯示了你在兩個二進制數字之間的結果。您需要將您的數據類型更改爲日期和時間。

0

您所查詢的唯一的作品,因爲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') 
相關問題