• ベストアンサー

「8月の第3土日」をデータベース化するには?

イベントなど定期的な行事の日程を 「月・何週目・曜日」といった形でデータベースにしたいのですが、 どういった形をとれば良いのでしょうか? 開始日と終了日をそれぞれ入力し、毎年カレンダーに自動で表示されるようにしたいと考えております。 また参考サイトなどがありましたら教えていただきたいと思います。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

やはり、日付型で持つべきです。 (1)編集関数(Format)が使える。 (2)日付用関数(DateAdd、DateDiff)が使える。 (3)○年△月第□☆曜日などはSQLで取得できる。 8月第3土曜日から日付を求めるのは簡単ではありません。 どうしてもとなると、上の記号に当たる部分(年、月、順位、曜日)を 1セットで記録しなければなりません。特定の値を求めるにあたって、 項目数が多いほど拙い設計と言えます。

hiroshi125
質問者

お礼

ご回答ありがとうございます。 日付型で持つべきというご意見、非常に参考になります。 私の考えていた処理法はかなり拙い設計だったようです。 任意の年の8月第3土曜の日付、例えば「2008-08-16」というデータを所持していればそこから2009年の8月第3土曜が「2009-08-15」であるという算出は可能なのでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

データベースですから、日付+イベント情報というデータを蓄積することに意味があるのではないでしょうか。 >「2008-08-16」というデータを所持していればそこから2009年の8月第3土曜が「2009-08-15」であるという・・・ 「○年△月の第3土曜日は何日か」というのは算術の問題で、データベースにどんなテーブル/レコードがあるか という事象とは無関係です。登録されたデータの中から、8月第3土曜日にあるイベントを抽出するというのが 本筋のような気がします。参考までに第3土曜日を求める関数を記載します。 Function 第3土曜(ByVal 年 As Long, ByVal 月 As Long) As Date Dim 日 As Date 日 = DateSerial(年, 月, 1) 第3土曜 = DateAdd("d", 21 - Weekday(日), 日) End Function

hiroshi125
質問者

お礼

ありがとうございます。 DBの本質的な部分を教えていただき大変勉強になりました。 テーブル/レコードの形式を決め、抽出法について考察しようと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>「8月第3土」として所持したいのです。 >そしてそこから8/16という日にちを算出したいのですが。 この場合第3土というのが (1)その月3回目の土曜日 (2)その月の1日の週を1週目とした3週目の土曜 によってやりかたは変わります。 また(2)の場合、 週の初めの日を月曜日とするか日曜日とするかで処理がかわります。 また、「8月第3土」で所持する場合、年情報もいれておかないと 日付を確定することはできません

hiroshi125
質問者

お礼

ご丁寧な回答ありがとうございます。 (1)のほうで算出したいと考えておりました。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

たとえば、今日が何月何週目何曜日か? (1)何月 SELECT MONTH(CURDATE()); (2)何週・・・ちょっと複雑 今月1日が年の中で何週目かもとめ、今日が年の中何週目かもとめる。 その差に1をたすと今月何週目かでる。 SELECT WEEK(CURDATE()) - WEEK(DATE_FORMAT(CURDATE(),"%Y-%m-01"))+1; (3)何曜日 SELECT WEEKDAY(CURDATE());

hiroshi125
質問者

お礼

ご回答ありがとうございます。 例えば8月第3土曜が8/16だとして、 DBは「8/16」ではなく「8月第3土」として所持したいのです。 そしてそこから8/16という日にちを算出したいのですが。 教えていただいた内容を参考にすると、 月の1日の曜日と何週目かを算出してそこから処理といった感じでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • データベースの検索

    visual basic6からaccessをデータベースにして自作アプリを作成しています。 そこでVBからデータベースのデータを日付検索を行いたいのですがやり方がわからないのでお願いします。 やりたいことは、VBの画面上から何年何月何日~何年何月何日と年月日を入力してデータベース内にある年月日情報からその条件にあったものだけを取り出すという処理です。 検索する際に年月日は手入力とカレンダーからの入力を考えているのですがカレンダーの表示の仕方もわかりません>< この質問を読んでご理解していただけた方はどのような方法が一番適しているかを教えてください;; お願いいたします。。。

  • 日付28日、30日、31日、月ごとに自動表示させたい。

    日付28日、30日、31日、月ごとに自動表示させたい。 1、月によって28日、30日、31日と自動表示させたいです。 2、(添付画像:カレンダー)「D2」1日を基準に 「年」「日付」「曜日」「祝日」を自動表示とセルに条件つき書式を使って 色を付けたのですが、その下のセルにも月が変わるごと自動で色をつけたいです。 名前(1番~15番)の列(日付、曜日、祝日)です。 上記の2点教えて下さい。 よろしくお願いします。

  • EXCEL 土・日の行を塗るつぶしたい

    EXCEL2003 初心者です。よろしくお願いします。 2008年度4月~3月の毎月の行事予定を作ろうと思います。 A1~E31まで表があります。 A列には1~31までの日にちが入っています。 B列には曜日が入っています。 土曜日と日曜日の行だけ(A列~E列まで)を白黒のパターンで塗りつぶしたい。 このときは、条件付書式でできますか。 やり方を教えてください。 お願いします。 2008年度(4月~3月)のフリーソフトで 手頃な月別カレンダーがあれば紹介してください。 よろしくお願いします。  

  • エクセル曜日11月31日、2月29~31日

    出勤表のようなものを作成しています。 M16に日付を表す1が入力されていて 16行目右方向にに2~31と入力されています。 印刷範囲外となるA11に西暦をA13に月を入力する事により 以下の関数が入っているM17に書式設定で曜日が表示されます。(17行目右方向に数式がコピーされています) =DATE($A$11,$A$13,M16) このままだと、31日がない月でも曜日が表示されてしまいます。 (翌月1日の曜日) 又、2月となると29日に3月1日の曜日が表示されてしまいます。 DATE(2005,11,31)というのは12月1日という事になるのですか? DATE(2005,11,31)⇒有り得ない⇒エラー値にはならないのですか? 2月29日~31日(できればうるう年を自動認識に)と 小の月の31日の曜日のセルを 空白にする関数を教えてください。

  • エクセルで日にちを入力すると矢印が自動的に引かれるとか。

    こんにちは。 エクセルで作業の進捗表を作成しています。 作業開始日と終了日を入力すると、 開始日~終了日が自動的に矢印として カレンダーに引かれる関数のような ものはありますか? ご存知の方、よろしくお願いします!

  • 週の始まりは、日曜日それとも月曜日?

    常識をお聞きするようでお恥ずかしいのですが..... よく「今週の○○曜日」という言い方をしますが、週の始まりは日曜日なのでしょうか、それとも月曜日なのでしょうか。 私は、カレンダーを見ると日曜日から始まっているため、週の始まりは日曜日だと思っていますが、それで正しいでしょうか。

  • エクセルで1月0日と表示される!!

    エクセルで2つのシートを使い、1つのシートには、一ヶ月の日付と点数を入力し、もう1つのシートは、先のシートからデータが飛ぶ形で、曜日ごと集計される形で、月ごとにまとめています。 しかし、集計のシートで、第5週がない場合、入力シートのセル内はブランクで、集計シートに表示されるのは1月0日となってしまいます。 説明がわかりずらいかと思いますが、取りあえず、シートを越えてデータを飛ばしたときに、1月0日と表示させない方法を教えていただければと思います。 ネットで検索しても、解決方法がヒットしません。 エクセルのスペシャリストの方、助けてください。

  • FileMaker Pro7 自動計算について

    現在、契約関係のデータベースを作成していますが、契約開始日と期間を入力すると、契約終了日が自動に計算できるようにしたいのですが、どのように式(関数?)を設定するればよいのでしょうか。 初心者なので、ヘルプを読んでもよくわかりません。 ・契約開始日 2004/01/01〔手入力〕 ・期間 6ヶ月〔一月単位:手入力〕 ・契約終了日 2004/6/30←自動計算 宜しくお願いいたします。

  • ファイルメーカPro7 自動計算について

    現在、人員管理のデータベースを作成していますが、契約開始日と期間を入力すると、契約終了日が自動に計算できるようにしたいのですが、どのように式(関数?)を設定するればよいのでしょうか。 初心者なので、ヘルプを読んでもよくわかりません。 ・契約開始日 2004/01/01〔手入力〕 ・期間 6ヶ月〔一月単位:手入力〕 ・契約終了日 2004/6/30←自動計算 宜しくお願いいたします。

  • 開始日を入力したセルと終了日を入力したセルがあり関数で開催日全ての日程

    開始日を入力したセルと終了日を入力したセルがあり関数で開催日全ての日程をカンマ区切りでひとつのセルに表示させたいのです A1 2010/9/8  B1 2010/9/10  C1  2010/9/8,2010/9/9,2010/9/10 のように表示させたくて セルA1に開始日、セルB1に終了日、 セルC1に =CONCATENATE(A1,",",A1+1,",",B1) と入力したところ 「40429,40430,40431」と表示されてしまいました セルの表示形式は「日付」です 日付の形式で表示させるにはどうしたらいいのでしょうか また日程は3日だけでなく5日のものもあるので もっといい方法があったら教えていただけると助かります 1000行以上あるので面倒くさいんです。助けてください