週末
答えて
DAYNAME関数を使用します。特定の日付のDaynameを与えます。
select * from yourtable where
(DAYNAME(start_date) = 'Saturday' or DAYNAME(start_date) = 'Sunday') and
(DAYNAME(end_date) = 'Saturday' or DAYNAME(end_date) = 'Sunday');
、これを試してみて、それが役立つことを願っています。
P.S.私はこのクエリを実行しないでください。
それを指摘してくれてありがとう@RiggsFolly。 – Pirate
問題ありません..... – RiggsFolly
回答ありがとうございます。私の質問によると、2日間の週末をチェックしたいのは、start_dateが2016-08-18で、end_dateが2016-08-24で、22と23が週末であることを意味しますこれはこれらの日付の間にあり、この行を取得する必要があります、私にそれを行う方法を提案してください – Raj
私が理解するところでは、開始日と終了日として2つの列を取り、それらの間の週末日数を数えたいとします。あれは正しいですか?
この回答How to get list of dates between two dates in mysql select queryには、範囲内のすべての日付のリストを取得するためのSQLがあります。
これを基に、開始結合列と終了列に基づいて必要な日付のみを選択して、内部結合としてその問合せを使用できます。その後、DAYNAMEを使用して日曜日と土曜日を数えます。
ここでは、使用するものに近づく例を示します。 これはまさにあなたが使うべきものではありません!これは、日付をハードコードするためにのみ構築されています(パラメータとして渡すのに非常に近い)。 あなたはそれにあなたのテーブルに参加することによってそれを適応させる必要があります!。私は怠け者であり、テストやデモンストレーションのためにテーブルを作ってみたいと思っていませんでした。(もっと重要なのは)私はあなたを助け、解決策を手渡すだけではありませんでした。
select count(one_date), dayname(one_date) week_day from
(select * from
(select adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) one_date from
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v) as all_days
where one_date between '2016-10-01' and '2016-11-15' -- <---- DON'T HARDCODE THESE, JOIN YOUR TABLE TO THE all_days AND FILTER THE DAYS YOU WANT THAT WAY
group by week_day
having week_day in ('Sunday', 'Saturday');
これは長いクエリであり、パフォーマンスが低下する可能性があります。しかし、これはあなたに必要な出力
SELECT x.id,x.name,x.amount FROM
(SELECT name,amount,DATEDIFF(end_date,start_date)+1 AS totDays,
start_date AS day1,ADDDATE(start_date,1) AS day2,
ADDDATE(start_date,2) AS day3,ADDDATE(start_date,3) AS day4,
ADDDATE(start_date,4) AS day5,ADDDATE(start_date,5) AS day6,
end_date FROM your_table)X
WHERE x.totDays>5 OR (WEEKDAY(x.day1)>4 AND x.day1<=x.end_date) OR
(WEEKDAY(x.day2)>4 AND x.day2<=x.end_date) OR
(WEEKDAY(x.day3)>4 AND x.day3<=x.end_date) OR
(WEEKDAY(x.day4)>4 AND x.day4<=x.end_date) OR
(WEEKDAY(x.day5)>4 AND x.day5<=x.end_date) OR
(WEEKDAY(x.day6)>4 AND x.day6<=x.end_date);
やメモ
SELECT name,amount FROM your_table WHERE
(DATEDIFF(end_date,start_date)+1) >5 OR
(WEEKDAY(start_date)>4 AND start_date<=end_date) OR
(WEEKDAY(ADDDATE(start_date,1))>4 AND ADDDATE(start_date,1)<=end_date) OR
(WEEKDAY(ADDDATE(start_date,2))>4 AND ADDDATE(start_date,2)<=end_date) OR
(WEEKDAY(ADDDATE(start_date,3))>4 AND ADDDATE(start_date,3)<=end_date) OR
(WEEKDAY(ADDDATE(start_date,4))>4 AND ADDDATE(start_date,4)<=end_date) OR
(WEEKDAY(ADDDATE(start_date,5))>4 AND ADDDATE(start_date,5)<=end_date);
、これを試してみることができます。start_date
とend_date
間DATEDIFF
が5より大きい場合
を、そして週末があるでしょう。 5までstart_date
と
とend_date
とそれを比較し、出力のWEEKDAY
が4より大きい場合、週末が存在するであろう。
あなたは(一緒に土曜日と日曜日)開始日と終了日の間の週末がある行を選択したい場合は、このクエリを使用することがあります。
select name, amount FROM your_table WHERE
datediff(end_date,start_date) > 6
or
(datediff(end_date,start_date)+weekday(start_date)>=6
and weekday(start_date)<>6);
(END_DATE、START_DATE START_DATEとEND_DATE包括的なDateDiff関数を仮定すると、 )は1週間よりも多くの日数があれば、1週間の間に週末があると確信できます。日数が少なくなると、指定された開始曜日から始まる日数が週末をカバーするかどうかをチェックする必要がありますが、開始日が日曜日(6日後の日曜日から始まるのは土曜日ですが、これらの2つの週末の日は次々に繰り返されるわけではありません)。このクエリを使用することができますが、開始日と終了日との間に少なくとも1つの平日(土曜日または日曜日)がある場合、行を選択したい場合には
select name, amount FROM your_table WHERE
datediff(end_date,start_date)+weekday(start_date)>=5;
- 1. java calendar - 週末の最後の週(週末なし)
- 2. 週末の返品問題
- 3. Java 8の週末フィルタLocalDateTime
- 4. ジャンプ週末機能? Django/python
- 5. CodeIgniterカレンダークラス週末削除
- 6. 週末日付リターン問題
- 7. 週末以外のループスルー
- 8. 平日は週末でスケジュールスクリプトは週末なら金曜日に実行
- 9. 週ごとのグループ番号と週末のグループ化
- 10. 週の開始と週末のタイムスタンプを取得
- 11. 週末を無効にする - bootstrap datepicker
- 12. 週末除外のoracle pl/sql:datepart()関数
- 13. 挿入または更新列週末
- 14. 週末を返すMySQL関数
- 15. SQL Server正しい週末のアカウント
- 16. 私はセットアップを持って週末
- 17. のPostgreSQL:週末のみを選択
- 18. スキップ週末と祝日2 datefields
- 19. PHPスクリプトで週末(日曜)を除く
- 20. アクセスSQL減算日(週末を除く)
- 21. 週末をWPFツールキットチャートで隠す
- 22. チェック対象日が週末(PHP)
- 23. マウスオーバーで週末にまたがるハイライトイベント
- 24. 週末に内容が異なる
- 25. R - データフレームから削除週末R
- 26. 数える行週末の両日に
- 27. jQueryツール - 週末の無効化
- 28. Googleシートの週末のロールのみ
- 29. 前日日付週末を除く
- 30. jquery datepicker:すでに無効な週末から週末を有効にする必要があります
あなたがDAYNAME()関数を試してみましたか? – Pirate
週末を含むことは達成が難しいかもしれません。あなたはこれを試すことができるかもしれません - http://lavaneur.blogspot.in/2012/09/working-days-bw-two-days-weekends-bw.html。 – Jayaprakash