dポイントプレゼントキャンペーン実施中!

イベントなど定期的な行事の日程を
「月・何週目・曜日」といった形でデータベースにしたいのですが、
どういった形をとれば良いのでしょうか?

開始日と終了日をそれぞれ入力し、毎年カレンダーに自動で表示されるようにしたいと考えております。

また参考サイトなどがありましたら教えていただきたいと思います。
よろしくお願いします。

A 回答 (4件)

やはり、日付型で持つべきです。


(1)編集関数(Format)が使える。
(2)日付用関数(DateAdd、DateDiff)が使える。
(3)○年△月第□☆曜日などはSQLで取得できる。

8月第3土曜日から日付を求めるのは簡単ではありません。
どうしてもとなると、上の記号に当たる部分(年、月、順位、曜日)を
1セットで記録しなければなりません。特定の値を求めるにあたって、
項目数が多いほど拙い設計と言えます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

日付型で持つべきというご意見、非常に参考になります。
私の考えていた処理法はかなり拙い設計だったようです。

任意の年の8月第3土曜の日付、例えば「2008-08-16」というデータを所持していればそこから2009年の8月第3土曜が「2009-08-15」であるという算出は可能なのでしょうか。

お礼日時:2008/06/16 10:41

データベースですから、日付+イベント情報というデータを蓄積することに意味があるのではないでしょうか。


>「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
    • good
    • 0
この回答へのお礼

ありがとうございます。
DBの本質的な部分を教えていただき大変勉強になりました。

テーブル/レコードの形式を決め、抽出法について考察しようと思います。

お礼日時:2008/06/16 17:24

>「8月第3土」として所持したいのです。


>そしてそこから8/16という日にちを算出したいのですが。

この場合第3土というのが
(1)その月3回目の土曜日
(2)その月の1日の週を1週目とした3週目の土曜
によってやりかたは変わります。
また(2)の場合、
週の初めの日を月曜日とするか日曜日とするかで処理がかわります。

また、「8月第3土」で所持する場合、年情報もいれておかないと
日付を確定することはできません
    • good
    • 0
この回答へのお礼

ご丁寧な回答ありがとうございます。

(1)のほうで算出したいと考えておりました。

お礼日時:2008/06/16 10:29

たとえば、今日が何月何週目何曜日か?



(1)何月
SELECT MONTH(CURDATE());

(2)何週・・・ちょっと複雑
今月1日が年の中で何週目かもとめ、今日が年の中何週目かもとめる。
その差に1をたすと今月何週目かでる。

SELECT WEEK(CURDATE()) - WEEK(DATE_FORMAT(CURDATE(),"%Y-%m-01"))+1;

(3)何曜日
SELECT WEEKDAY(CURDATE());
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

例えば8月第3土曜が8/16だとして、
DBは「8/16」ではなく「8月第3土」として所持したいのです。
そしてそこから8/16という日にちを算出したいのですが。

教えていただいた内容を参考にすると、
月の1日の曜日と何週目かを算出してそこから処理といった感じでしょうか。

お礼日時:2008/06/16 02:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!