2012-06-20 120 views
2

當我是PHP的初創學生時,我使我的數據庫一起存儲日期和日期,現在我遇到了一個大問題,我已經在數據庫中存儲了超過3000個訂單,但是當我想要使用日期搜索我是一件很麻煩的事情,因爲日期和時間在一個字段中,我試圖讓查詢變成where date LIKE '%$date',但我沒有收到任何結果,有沒有人知道我現在可以做什麼?在數據庫中搜索日期PHP

而且我怎樣才能改變整個數據庫它應該是所有的日期和時間分開,它不應該影響我的數據庫?

UPDATE:

在數據庫中的數據的樣子,10/16/2012 5:00pm

得到任何幫助。

+3

您可以顯示數據的一個例子,就是返回日期如何從數據庫? –

+0

我更新了問題。 – thegrede

+0

那麼,日期和時間不應該是單獨的,但一個'DATETIME'列會想到,你似乎使用基於varchar /其他字符串/字符的列,如果我閱讀這個權利... – Wrikken

回答

2

在回答你的問題的部分:

找到你在當前模式所需要的日期。

根據您的編輯,請使用:

<?php 

$query = "SELECT * FROM table_name WHERE `date` LIKE '{$date}%'"; 

?> 

類似於你貼什麼可以幫助你的查詢:

<?php 

$query = "SELECT * FROM table_name WHERE `date` LIKE '%{$date}%'"; 

?> 

請注意,你在你的問題的 %使用( '%$date' )只會匹配以 $date結尾的值,而我的示例(​​)中的模式將匹配 $date其中任何位置的值。或者,您可以使用 '{$date}%'在值的開頭匹配日期 - 不確定您想要的。

2.更新您的模式以將日期和時間分成兩列。

您應該在這裏採取的第一步是將兩列(date_onlytime_only)添加到您的表中。接下來,更新您的代碼以處理並將此信息另外存儲到您當前正在使用的'all-in-one'date列;您不想通過一步切換來打破當前的代碼庫。一旦您可以驗證日期/時間數據是按照您希望的方式編寫的,則第三步是從新的日期/時間列中讀取(並記錄)以及生產讀數到date。一旦您可以驗證讀取是否按計劃運行,切換您的開發環境以從新列中讀取數據並進行測試,直到您確信一切正常。

2

你可以做到以下幾點:

$date = "2012-03-08"; 
$sql = "SELECT * FROM table WHERE date => '$date 00:00:00' AND date =< '$date 23:59:59' 

編輯:看到您的編輯,這不工作了。您需要將日期列轉換爲適當的MySQL日期時間或TIMESTAMP類型。

在當前的數據庫設計,你可以使用這樣的事情:

日期

$date = "10/16/2012"; 
$sql = "SELECT * FROM table WHERE date LIKE '$date%' 

時間

$time = "5:00pm"; 
$sql = "SELECT * FROM table WHERE date LIKE '%$time' 
+0

感謝這個好主意,但安德魯Kozak也回答我的第二個問題 – thegrede

5

爲何%$日期?你應該做相反的事情。

WHERE date LIKE "".$date."%" 
1

如果它是一個日期時間字段,你可以使用

WHERE DATE(datetime_field) = '01-01-2012'; 

或(更好,因爲它可以使用索引)

WHERE datetime_field >= '01-01-2012 00:00:00' AND datetime_field <= '01-01-2012 23:59:59';