2012-05-11 112 views
0

我需要檢查在數據庫表格(postmeta.event_date)中以字符串形式存儲爲字符串的英國日期是在使用SLQ格式BETWEEN 'yyyy-mm-dd' AND 'yyyy-mm-dd+28'的兩個日期之間。我確定要檢查的日期是確定的,它是檢查我遇到問題的日期,因爲它的SQL格式不正確。檢查英國日期是否在SQL中的兩個日期

我沒有辦法改變檢查日期的格式,因爲它附加到一個帖子,我不知道什麼職位離開數據庫,直到我可以檢查他們是否我的選擇之間日期...

任何想法,如果這是可能的,或者我在看兩個查詢(抓住所有的帖子獲取我真正希望通過檢查數據在PHP中的ID)?謝謝。

+0

英國格式化日期如何存儲?作爲一個字符串,日期時間,時間戳? 這兩個日期是固定的還是他們改變了?間隔時間總是28天嗎? – h00ligan

+0

@ h00ligan - 英國日期存儲爲一個字符串,並且這兩個日期確實發生了變化(第一個是今天,第二個是今天+28),但是我對這部分確定 - 它的日期格式錯誤我頭痛!編輯的問題,以clairfy。 –

回答

0

如何

WHERE event_date BETWEEN 'yyyy-mm-dd' AND DATE_ADD('yyyy-mm-dd', INTERVAL 28 DAY) 

顯然yyyy-mm-dd將與實際值取代:

WHERE event_date BETWEEN '2011-05-11' AND DATE_ADD('2011-05-11', INTERVAL 28 DAY) 

如果您的日期字符串不是預期的格式,你得先分析它。您可以使用PHP或使用STR_TO_DATE

WHERE event_date 
BETWEEN 
    STR_TO_DATE('01/05/2011','%d/%m/%Y') AND 
    DATE_ADD(STR_TO_DATE('01/05/2011','%d/%m/%Y'), INTERVAL 28 DAY) 
+0

我認爲他特別提到他需要幫助轉換日期的格式。 – Eljakim

+0

應該可能顯示他在問題中使用的實際日期格式。 – Cylindric

+0

謝謝@Cylindric,但並不是我需要幫助的時間間隔,這是事實,我需要檢查數據庫中的日期是dd/mm/yyyy格式的英國日期,MySQL不喜歡這種格式。 –

0

這是從今天期 - 下一個28天

$now = mktime(); 
    //set your period date 
    $from = mktime(0, 0, 0, date("m",$now), date("d",$now), date("Y",$now)); 
    $to = mktime(23, 59, 59, date("m",$now), date("d",$now)+28, date("Y",$now)); 

這裏是您的查詢

SELECT * FROM `postmeta` WHERE UNIX_TIMESTAMP(`event_date`)>='".$from."' AND UNIX_TIMESTAMP(`event_date`)<='".$to."' 
1

可以使用下面的結構:

STR_TO_DATE(postmeta.event_date, '%d /%米/%Y')之間的 'YYYY-MM-DD' AND「YYYY-MM -dd'+ INTERVAL 28 DAY

但是,使用自定義日期格式(例如數據庫本機不支持),可以用於過濾的列通常是一個糟糕的設計,除非可能有人確切地知道它們是什麼這樣做。

依賴於上面提供的過濾器的查詢將起作用,但它不會非常有效,因爲這樣的範圍查找無法通過索引進行優化。

+0

謝謝你的擡頭。在一個理想的世界裏,這將是一個日期戳,但數據正在通過Wordpress添加到數據庫(使用「自定義字段」功能),並且無需進一步調查,我不確定我是否可以將其過濾到正確的格式存儲在數據庫中,然後以另一種方式在「編輯帖子」屏幕上顯示。 –

相關問題