2017-06-16 54 views
0

我想存儲日期範圍以允許在日期範圍內有條件的日期範圍以適應季節變化。我用的是以下條件mysql日期範圍與較大日期之前的較大日期

date_start < CURDATE() AND date_end > CURDATE() 

這裏的問題是,如果開始日期在結束日期較大(月)(6月)

在我的數據庫,我存儲的日期(2017- 07-01)作爲一個日期,但這一年是不相關的(我甚至沒有給用戶一個選擇一年的機會)。我只是將它作爲驗證日期進行存儲(如果有更好的方法,我會爲它做準備)。在上面的示例中,範圍介於上一年的九月至今年的六月之間。我怎樣才能適應這一點,而不依賴於一年。請記住,日期範圍可能僅僅是同年的一月到二月,所以我需要靈活性。

我想我可以將日期轉換爲數學數字,看看值是否大於或等於,但這似乎是相當多的開銷。

什麼是我可以查詢數據庫以確定當前日期介於正確的開始日期和結束日期之間的有效方法?

+0

使用case語句 – Strawberry

+0

條件是在一個連接語句 – iPoo

回答

0
(date_start < date_end AND date_start < CURDATE() AND date_end > CURDATE()) OR (date_start > date_end AND (date_start > CURDATE() OR CURDATE() < date_end)) 

可能是這有助於

+0

問題是如果我將日期存儲爲0000-06-17或2017-06-17並從curdate()生成一年,如果會最終將不會正常工作,因爲curdate()的年份總是會變得更大 – iPoo

+0

雖然我喜歡它的開始。我甚至沒有考慮過測試哪個存儲日期更大,然後根據它調整條件。 – iPoo

+0

您可以設定年份 - 例如2017。在數據庫中存儲2017年,不要使用CURDATE() - 而是使用基於2017年的「當前日期」。或者,也許,您可以更改存儲日期範圍的方式 - 僅存儲月份和日期。 –

0

啊哈!

使用您的測試哪個日期實際上是彼此之前的想法,我們作出了下列條件

(date_start < date_end AND date_start < CURDATE() AND date_end > CURDATE()) OR (date_start > date_end AND (date_start > CURDATE() AND CURDATE() < date_end)) 

然而,這需要一年到這是不希望

我後來想通該帳戶是否我們格式化每個curdate,以有效去除一年如

DATE_FORMAT(CURDATE(), '0000-%m-%d') 

我會然後用上述替換每個curdate(假設我是storin g數據庫中的日期爲0000-mm-dd)。我不喜歡這個,因爲我一次又一次地重新計算相同的數字。我想也許我可以存儲一個別名的數額,但在加入聲明我不能這樣做。因此我的解決方案是php和mysql佔位符的組合。

我用戶的PHP找出當前日期一次,並用它在一個佔位符

$data = date('0000-m-d', time); 

我調整原稿語句條件 (DATE_START < DATE_END和DATE_START <:C和DATE_END> :c)OR(date_start> date_end AND(date_start>:c AND:c < date_end))

並將變量$ date添加到我的sql數組和賓果!