• 締切済み

1ヶ月に土日は何日あるか

1ヶ月に土日は何日あるかをSQLで調べたいと思ってます。 指定した年月に土曜日が何回あるかがわかるような便利な関数はないでしょうか? 教えてください。

  • Oracle
  • 回答数9
  • ありがとう数26

みんなの回答

回答No.9

すいません、#8です。オリンピックを見ながらずっとカレンダーを眺めていたのですが、もっと簡略化できますね。 年間カレンダーとしては、#8にもあるとおり全部で14パターンですが、各月ごとのカレンダーのパターンは、つまるところ28パターンに全て集約できますね。 ある月の一日が日曜日で始まる場合、月曜日で始まる場合、・・・で、7パターン。それに加えて、閏年がある時も踏まえた上で、各月ごとのカレンダーの末日は28日、29日、30日、31日の4パターンのみです。よって、7×4より全部で28パターンですね。 で、土曜日の日数のみを表すテーブルを、以下のように作成します。(年間カレンダーより、規則的にこの様な結果になると思います。) \|28 29 30 31 ーーーーーーーーーー 日|4 4 4 4 月|4 4 4 4 火|4 4 4 4 水|4 4 4 4 木|4 4 4 5 金|4 4 5 5 土|4 5 5 5 上記のテーブルを元に、以下のような条件でSQL文を記述すれば、すぐに指定した年月に土曜日が何回あるかがわかることと思います。 列(属性)→LAST_DAY関数を用いて、各月の末日が4つのうちの何れかを求める。 行(組)→TO_CHAR関数を用いて、各月の一日が何曜日から始まるのかを求める。 ちなみに、日曜日の日数のみを表すテーブルは敢えて作成しないでおきますが、上記と同様にすればすぐに専用のテーブルを作成できることと思います。

回答No.8

OracleのSQLでは、ダイレクトにそのような処理をする関数が用意されていないため、一般的にはASPなどのプログラミング側で処理をすることになるかと思います。Javaなどであれば、恐らくコレクションなんかを用いるんじゃないかなあ、と。(PL/SQLに関しては、専門外なので割愛。) ただ、あくまでもSQLにこだわるのであれば、以下のようなアルゴリズムもあります。 そもそも、カレンダーというのは全部で14パターンあり、毎年そのどれかのパターンを繰り返し使用しているということになっています。 具体的には、元旦が月曜日の時、火曜日の時、・・・で、7パターン。それに、閏年の場合がそれぞれにありますから、×2で14ですね。(詳細については、「万年カレンダー」でググってみてください。) 今回の場合、インプットは「年」、「月」、「曜日」で、アウトプットが「日数」ですから、以下のようなテーブル2つ[SAT_DUAL],[SUN_DUAL]を事前に用意しておきます。 テーブル[SAT_DUAL] or [SUN_DUAL] 列(column)→1月、2月、3月、4月、5月、6月、7月、8月、9月、10月、11月、12月の12つ。 行(row)→「元旦_月」、・・・、「元旦_日」、「閏年_元旦_月」、・・・、「閏年_元旦_日」の14つ。 列の指定については、インプットの「月」をそのまま利用すればいいと思います。 行の指定については、インプットの「年」が4で割り切れるかで閏年かどうかを判断し、且つその「年」の元旦が何曜日なのかをOracleのTO_CHAR関数で求め、その結果をWHERE句に記述すればいいと思います。 もちろん、土・日両方の場合は、上記2テーブルの結果を足し算すればいいわけですね。 ちなみに、各テーブルのデータ(具体的な日数)については、以下のサイトなどを元に一つずつ入力しておいてください。(最初だけは、これが大変です。) 「万年カレンダー」 http://koyomi.vis.ne.jp/sub/cal_year.htm 以上、実際に試してはいませんがアドバイスということで。

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.7

いろいろな意見があって非常に興味深いですが、確かに1回きりの作業ならSQLではやらないでしょうね。ただ、DBプログラミング(PL/SQL)だったら、そういうニーズがあればDBサイドに欲しいと思うかもしれないなとは思います。 考え方は難しくなくて、TO_CHAR(日付,'d')で日曜を1とする番号が取得できますから、土曜、日曜がそれぞれ7番目に来るように日数を補った上で、7で割り、商を合計するだけです。 長いので関数にした方がいいでしょうが。。 指定した日の属する月の土日の数 CREATE OR REPLACE FUNCTION f_NUMHOL(P_DATE DATE) RETURN NUMBER AS BEGIN RETURN ( TRUNC( (TO_CHAR(LAST_DAY(P_DATE),'dd') +TO_CHAR(P_DATE-TO_CHAR(P_DATE,'dd')+1,'d')-1)/7,0) +TRUNC( (TO_CHAR(LAST_DAY(P_DATE),'dd') +MOD(TO_CHAR(P_DATE-TO_CHAR(P_DATE,'dd')+1,'d')+5,7))/7,0) ); END;

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.6

1ヶ月に土日が何日あるかというのはデータベースの 内容によらずに一定なので、データベース処理を行う のが目的のSQLで処理をするのは一般的ではありません。 どうしても必要なのであれば、私なら年月と土日の数 から成るテーブルを作りますが?

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.5

がるです。 えと…私が「奇異である」と感じたのは。 SQLは、本質的に「リレーショナルデータベースにおいて、データの操作や定義を行うための問い合わせ言語」なので。 基本的には「データの取得や格納をSQLで行い」「それらのデータをプログラム側で処理する」というのが、自然な流れになります。 無論、SQLでも「可能」ではあるのですが。 「可能」と「適切」の間には、深い隔たりがあるので。 もし、Cosmo2007さんが「趣味や個人的なもので」作成されているのであれば、それは個人の範疇だからよろしいと思うのですが。 もし業務でなさっているのであれば、現場の流儀等、特別な理由がないかぎり、そういった事はSQL(DB)側よりもプログラム(ビジネスロジック)側でやるほうがよろしいかと思われます。 以上、老婆心ではありますが。

回答No.4

遊び半分でいろいろとググっていたら、以下のサイトを発見。 OracleSQLパズル 5-18 期間内の特定の曜日の数を取得 http://oraclesqlpuzzle.hp.infoseek.co.jp/5-18.html ただし、私みたいに中学受験を経験していない者にとっては、「植木算」からの勉強が必要のようですね。

参考URL:
http://jibun.atmarkit.co.jp/lskill01/rensai/bronzesql03/bronzesql01.html
  • Willyt
  • ベストアンサー率25% (2858/11131)
回答No.3

そのような組み込み関数はないと思います。自分で作るよりないですよね。その場合、インプットしなければならない引き数は、月と1日の曜日の二つになります。7×4=28ですから、2月でも4回あり、7×5=35ですから、6回はないことになります。そこで5回あるかないかはその月が何曜で始まったかによることになります。2月は通常では4回、閏2月の場合は土曜で始まったときのみ5回、小の月では金曜 土曜で始まったときは5回、大の月では木曜、金曜、土曜で始まったときが5回となります。曜日を数字で表すことにすると割合簡単にルーチンが組めますよ。日曜はこれが一つずつ前進しますよね。

Cosmo2007
質問者

お礼

ご回答ありがとうございます。 >そのような組み込み関数はないと思います。 そうなんですか。 >自分で作るよりないですよね。 わかりました。 ゴリゴリ頑張ってみます。

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.2

その検索を行おうとしているデータベース上には、どのような項目が定義されているのでしょうか?

Cosmo2007
質問者

お礼

ご回答ありがとうございます。 >その検索を行おうとしているデータベース上には、どのような項目が定義されているのでしょうか? DBの項目は色々あるのですが、FROM dual で上手くできないかと思いまして…。

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 えと…本質的には、そもそういう事をSQLでやる事自体が少々奇異であるように思われるのですが。 普通にプログラム上でやらない、あるいは出来ない理由などがあるのでしょうか?

Cosmo2007
質問者

お礼

ご回答ありがとうございます。 >えと…本質的には、そもそういう事をSQLでやる事自体が少々奇異であるように思われるのですが。 そうなのですか? >普通にプログラム上でやらない、あるいは出来ない理由などがあるのでしょうか? 出来ない理由はないです。 ただSQLでできるのなら、そのほうが便利かと思ったのです。

関連するQ&A

  • Excel 2ヶ月後の日付(土日祝日の場合は、直後の平日)

    Excel2007 指定日から1ヶ月後の日付(土日祝日の場合は、直後の平日)の出し方を教えてください。 WORKDAY関数では、できないのです。 よろしくお願いします。

  • 【エクセル】土日のカウント方法

    エクセルで「開始日」と「終了日」を指定して、 開始日~終了日の間に何回土日があるか求める方法を教えていただきたいと思います。 例えばセルA2に「2006/12/5」、セルB2に「2006/12/20」と入力してあったとして、 セルC2に12/5~12/20間の土日の数「4」を出したいのですが。 計算式や関数などを使用して求める方法があれば、よろしくお願いします。

  • 土日は会わない彼。

    私には付き合って数ヶ月の彼氏がいます。彼はとても優しく、紳士的で、素敵な方です。 私たちはいつも金曜日の夜に会っています。私は平日は仕事、土日が休み。彼は大学生です。土日でも大学で研究することもあるようで、(一度見せてもらいました)とても頑張っている方です。しかし今日は友だちと会いに行くとか、遠くから友達が来るから会う、など聞くので研究ばかり、というわけではなさそうです。 しかし…私たちはいつも金曜日に会います。これまでに数回だけは土曜日に変更したことがありましたが、土曜日にイベント(友人のライブとか)があった時のみでした。基本的に私は平日仕事ですし、バタバタして会いに行くよりは土曜日に会いたいのですが、彼は何故か金曜日がいいようで。 もしかして、他に女が…?と不安に感じたりするのですが、毎週金曜日は彼の家に泊まりに行っていて、特に怪しいものもなく、むしろ私の歯ブラシを見えるところ(彼の歯ブラシの隣)に置いていたり、可愛い容器に入れ替えた化粧水や乳液なども置いているので誰か他の子が出入りしているような感じはないし、彼の友達何人かにも紹介してもらったこともあり、周囲も私が彼女、と認識してくれているようで、心配することはないのだろうと思うようにしています。 しかし、もやもやする気持ちは拭いきれず…!彼には女友達も多く、土日に会いに行くという友達が誰かも知りません(彼は友達、としか言っていない)し、一体何してるんだろう?とは思いますが、彼も私も束縛されたくないタイプなので「全部話して!」なんて言うつもりはありません。そしてどうやら彼は「好き」とか言わないタイプのようで今まで言われたことはありません。 だからやっぱり不安になるし、どうして金曜の夜だけなのー!と一人でため息を吐いてしまいます。 色々聞きだしたり、しつこくして嫌われたくないし、と思うと何も言い出せず…。 実はこんなに男性を好きになったのは初めてで、どう動けばいいのかわかりません… とりあえず、土日は私も友達と予定を入れたり、勉強頑張ったりするようにしています。 第三者からこの状況を見て、一体どういうことだと思いますか?私はどうすればよいのか、何かアドバイスがあれば、どうか教えていただけませんか。 長文で乱文ですが、最後まで読んでいただきありがとうございました。 どうぞ、よろしくお願いいたします。

  • 土日の特急「やくも」

    今月8月24日土曜日の朝か昼、 次の日の25日日曜日の昼頃、 に特急「やくも」に乗ろうと思っています。 土日の特急「やくも」は、混みますか? 座るためには指定席を買った方がいいでしょうか? それとも、自由席でも十分座れるくらいですか? 土曜日は指定席で、日曜日は自由席。 というのが良いのかなぁとか思っています。 よろしくお願いいたします。

  • 土日に毎週は疲れちゃう?

    土日に毎週は疲れちゃう? 付き合って2ヶ月にならない彼女がいます。 凄くラブラブで,毎週土日にデートしていました。 ちなみにお互い社会人ですが,彼女は定時に毎日あがる仕事環境で,僕は毎日終電の生活でした。 正直,僕は休日休みたい願望もありますが,でもそれ以上に毎週 会えるのを楽しみにしていましたので土日デートをしていました。 昨夜, 「今度の土曜日は体休めて。日曜だけ会いましょう」と言われました。 僕は「おれは大丈夫,全然会えるよ」と言ったので 彼女は「うん。…」とだけ言っていました。 しかし翌日 もしかして彼女のほうが疲れていたんだろうと思い……… 本日メールで 「今度の土曜日は会わないことにしよう」 と送りました。 そしたら彼女が 「昨日会いたがってたのに,どうして土曜日会わないって決めるようになったの?」と不思議……疑い出してきました。。 対応として間違っていたでしょうか? どうしてあげれば良かったのでしょうか

  • 支払日の土日設定

    アクセスクエリで質問です。A,B,の得意先の支払日が15日で、今月14日が土曜日、15日が日曜日だとします。この場合、Aは13日に支払、Bは16日に支払されます。今アクセスクエリでは共に支払日欄は常に15となるようにしています。 これに土日の場合の前翌営業日の設定をもたせることは可能でしょうか?また、その場合の関数は何を使えばいいんでしょうか?詳しい方いらっしゃいましたら、ご教示下さい。

  • 土日が空いてない女性

    土日が空いてない女性 二ヶ月前に,あるお見合いパーティーで知り合った女性がいます。 彼女は25歳の会社員で,土日休み。 土日にお茶を誘うと,「土日は予定が一杯で(T-T)平日じゃ無理ですか?」 と返信があり… なんかおかしいな…と思いつつ, 僕は平日は残業があり,実際無理だったので。その旨を伝えて話しは流れました。 しかし,諦めずに二週間を空けて,再度,土日を誘ってみると 「土日は友達と予定入れちゃって」 とやはり土日は無理でした(笑) これは彼氏か男友達が多いタイプ? と思って, 飯だけ奢らせて,良いように使われるのもシャクだったので,諦めていました。 そしたら,その翌週, 「明日,日曜日に予定が突然空きました。夕飯でもどうですか?」 と突如メールが着ました。 驚いたのですが, 「でた!夕飯だけ食べて,都合の良い男作り」と思ったので 「日曜日はすでに予定入ってまして……」 とやんわり断りました。 これで終わりだろう,あーいうタイプは一人に固執しないし………と思っていたら その三日後。 「今度の土曜日の夕方から予定ありますか」 と,今度は土曜日に誘いメールが着ました! 正直,怪し過ぎるので迷っているのですが……… 迷う理由として (1)徐々に土日を譲歩してきてくれてる (2)これほど向こうから誘ってくるのは,ライバル男性陣の中でも自分は上位? (3)彼女が僕の自己紹介の内容をやけに鮮明に覚えているから,結構向こうも気になってる? とか,予測しているからです。 何も考えずに,食事して印象がよければ翌週も土日に会えるはずだし。 一回行ってみようかな………とも思ってます。 しかし,その他大勢のように彼女に飯だけ奢らせて,以降に何もなし(^-^; と予想もしちゃってます…… 皆様なら,どうしますか? やめといたほうが良いでしょうか?(^-^; あ……僕は32歳で,会社員で,ルックスは,彼女は「ケミストリーのドウジンに凄い似てる~」とお世辞に言ってはくれてました………

  • 第一、第三、土曜日のセルに条件付書式設定で色を付けたいのですが、そのよ

    第一、第三、土曜日のセルに条件付書式設定で色を付けたいのですが、そのような関数はあるのでしょうか。 全ての土日に色を付けるのは =WEEKDAY(J4,1)を使っていますが、第三・四など、曜日を指定することはできるのでしょうか。 どなたか、よろしくお願いします。

  • 土日切符

    既出かもしれませんが、見つけられなかったため確認です。 土日切符の使い方についてですが、 土曜と日曜に別々の人が使うのは規制されてるのでしょうか? 例えば、土曜日に僕が使用し、日曜日に母が使用する。 というのは可能でしょうか? 規約上どこにも見あたらないですが、簡単に見つけられないところに書いてあるのかもと思い、確認したいところです。 よろしくお願いします。

  • 休みが土日合うのに

    休みが土日合うのに 会うのは日曜日の夕方からだけの 彼氏はどう思いますか? 付き合って一ヶ月です。 土曜日は仕事が月一くらいあって それ以外は朝から夜まで自分が企画したオフ会で遊んでます。 日曜日もオフ会で食べるオフ会がない 夜だけ会うんです。 月一だけ1日デートです。 土曜日に会おうとは言ってきません。 いま他にめぼしい人がいないので とりあえず付き合っていますが 大切にされてないですよね?? 同棲しようとか言われていますが ただの自己中なだけですか? 埼玉と東京でそんなに離れてません。