where句で9月1日を使用する必要があり、年をハードコードしたくありません。間に9/1/yearを返す最善の方法は何ですか?mysql毎年同じ日
where p.post_date between '2016-09-01' and DATE_ADD(CURDATE(),INTERVAL 1 DAY)
「2016-09-01」の置き換えを探して、次の年にやり直してください。また、同じ年のoct、nov、decで働く必要があります。
where句で9月1日を使用する必要があり、年をハードコードしたくありません。間に9/1/yearを返す最善の方法は何ですか?mysql毎年同じ日
where p.post_date between '2016-09-01' and DATE_ADD(CURDATE(),INTERVAL 1 DAY)
「2016-09-01」の置き換えを探して、次の年にやり直してください。また、同じ年のoct、nov、decで働く必要があります。
は基本的に、あなたは前年たいです。
使用する日付の形式を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
これは関数/ルーチンに入れて、必要な場所で使用できます。
それはそれです!ありがとう。最終ソリューション: ここで、p.post_dateは 月(CURDATE())<9 THEN STR_TO_DATE(CONCAT(YEAR(CURDATE()) - 1、 '-09'、 '-01')、 '%Y-とDATE_ADD(CURDATE()、%-m、%d) 、INTERVAL 1 DAY) – SJ14420
あなたはmonth()
とday()
を使用することができます。
select t.*
from t
where month(datecol) = 9 and day(datecol) = 1;
私はあなたが現在の年のyear/09/01
を取得したいと思いますか?あなたは現在の年の転換日とあなたがターニング日後にある現在のものの前にあるとき
SELECT *
FROM YourTable
WHERE datecol = CONCAT (YEAR(CURDATE()) , '/09/01')
ほとんど...時にはマイナス1年になります。 今のところ、レポート期間は今日まで2016/09/01です。翌年9月1日に報告期間が始まります。 – SJ14420
あなたは 'between文章'を表示できますか?私たちにdbスキーマ、サンプルデータ、および期待される出力を示してください。 \t [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [**スタート**] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)質問品質を改善し、より良い回答を得る方法を学ぶことができます。 –
ここで、 '2016-09-01'とDATE_ADD(CURDATE()、INTERVAL 1 DAY)の間のp.post_date '2016-09-01 'の置き換えを探して、来年もまたは今後使用できるようにします。 – SJ14420