我需要在where子句中使用9月1日,並且不希望對年份進行硬編碼。什麼是返回9/1 /年以在兩者之間使用的最佳方式?mysql每年的同一天
where p.post_date between '2016-09-01' and DATE_ADD(CURDATE(),INTERVAL 1 DAY)
尋找「2016-09-01」的替代品,以便它在明年和未來再次發揮作用。此外,需要爲同年的十月,十月和十月工作。
我需要在where子句中使用9月1日,並且不希望對年份進行硬編碼。什麼是返回9/1 /年以在兩者之間使用的最佳方式?mysql每年的同一天
where p.post_date between '2016-09-01' and DATE_ADD(CURDATE(),INTERVAL 1 DAY)
尋找「2016-09-01」的替代品,以便它在明年和未來再次發揮作用。此外,需要爲同年的十月,十月和十月工作。
基本上,你想上年當你當你轉動日後在本年度的轉折日期和當前一個之前。
我建議告訴MySQL你正在使用什麼日期格式,這樣做,你可以使用STR_TO_DATE
函數。
CASE
WHEN MONTH(CURDATE()) < 9 THEN STR_TO_DATE(CONCAT(YEAR(CURDATE())-1, '-09-01'), '%Y-%m-%d')
ELSE STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-09-01', '%Y-%m-%d'))
END
你可以把它放在函數/例程中,並在需要的地方使用它。
就是這樣!謝謝。最終溶液:CASE 其中p.post_date之間 WHEN MONTH(CURDATE())<9 THEN STR_TO_DATE(CONCAT(YEAR(CURDATE()) - 1, ' - 09', ' - 01'),「%Y- %0%(%d%) ELSE STR_TO_DATE(CONCAT(YEAR(CURDATE()),' - 09',' - 01'),'%Y-%m-%d')END 和DATE_ADD(CURDATE() ,INTERVAL 1天) – SJ14420
我想你想獲得本年度的year/09/01
?
SELECT *
FROM YourTable
WHERE datecol = CONCAT (YEAR(CURDATE()) , '/09/01')
幾乎...有時它會是年減1。 像現在一樣,報告期爲2016年9月1日至今天。報告期將於明年9月1日重新開始。 – SJ14420
你能告訴我們'語句之間'嗎?向我們展示數據庫模式,樣本數據和預期輸出。 \t請閱讀[**如何提問**](http://stackoverflow.com/help/how-to-ask) \t \t這裏是一個偉大的地方[** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)來了解如何提高您的問題質量並獲得更好的答案。 –
其中p.post_date位於'2016-09-01'和DATE_ADD(CURDATE(),INTERVAL 1天)之間 正在尋找「2016-09-01」的替代品,以便明年和未來再次運行。 – SJ14420