簡體   English   中英

mysql選擇日期之間

[英]mysql select dates between

我有一個名為價格的mysql表,它存儲日期從和這樣:

id    from          to              price
1     2013-11-25    2014-01-08      55

用戶選擇一個月和一年,我希望它顯示該月的所有結果,因此,如果用戶選擇2013年11月,2013年12月或2014年1月,則將包括上面的行。

id    from          to              price
2     2013-10-25    2013-11-07      100

如果他們選擇了2013年10月或2013年11月,則會顯示上面的行,因為該行始於10月,結束於11月。

我努力了

SELECT * FROM `prices`
WHERE MONTH(prices.from)<={$_SESSION['month']}
AND MONTH(prices.to)>={$_SESSION['month']}
AND YEAR(prices.to)={$_SESSION['year']}
ORDER BY prices.from ASC

這不起作用,我不確定該怎么做

您可以使用STR_TO_DATE從用戶選擇的月份和年份創建日期,然后使用DATE_FORMAT以YYYY-MM格式放置表格的日期列,並將兩者與用戶插入的YYYY-MM進行比較。

我不精通php,但是這是sql中的示例(您可以在str_to_date中使用任何一天,因為您會忽略它):

SELECT * FROM `prices`
WHERE DATE_FORMAT(prices.`from`,"%Y-%m") <= 
   DATE_FORMAT(STR_TO_DATE('01,10,2013','%d,%m,%Y'),"%Y-%m")
AND DATE_FORMAT(prices.`to`,"%Y-%m") >= 
   DATE_FORMAT(STR_TO_DATE('01,10,2013','%d,%m,%Y'),"%Y-%m")
ORDER BY prices.`from` ASC

sqlfiddle演示

嘗試改用“ BETWEEN”。 例:

SELECT * FROM `prices` WHERE MONTH(`from`) BETWEEN '10' AND '12' AND YEAR(`to`)='2013'

請遵循以下方法:

SELECT * from prices
WHERE str_to_date('{$_SESSION['month']}-{$_SESSION['year']}','%b-%Y') BETWEEN date(prices.from) AND date(prices.to)

您可能只想在str_to_date中使用正確的格式,當前它會轉換以下格式= 2013年10月

檢查其他格式: http : //dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM