重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

カレンダーのようなものを作ってスケジュールの管理をしたいと思い、

start_at datetime
end_at datetime
sunday boolean
monday boolean
tuesday boolean
...

のように予定の開始・終了時間と、定期的な予定用に曜日のフラグを立てるためのフィールドを用意しました。
データ作成時にすでに登録してある予定と被っているものを抽出したいのですが、

たとえば
毎週月・水・木曜 10:00~12:00
のデータが登録してあり、
1/4 14:00 ~ 1/10 10:00
みたいなデータを新たに登録しようとした場合にどういう風にSQLを書けばいいのかがよくわかりません。
日付から曜日を割り出して、たとえば0なら日曜のフラグがたっているものを抽出するみたいなSQLをかけるのでしょうか?
できれば1回のSQLでできればいいのですが……

聞きたいことがうまく伝わらないかもしれずもうしわけないです。
よろしくお願いします。

A 回答 (2件)

>毎週月・水・木曜 10:00~12:00のデータが登録してあり、


>1/4 14:00 ~ 1/10 10:00

期間内に水曜の10~12字を包含しているので、この場合はフラグが
たつのが正解ではないですか?
おそらくフローがまだ固まっていないのだとおもいます、
きちんと設計段階からコーディングをした方がよいですね
    • good
    • 0
この回答へのお礼

すみません、例が悪かったです。
>1/4 14:00 ~ 1/10 10:00
これだとあれですが、
1/4 14:00 ~ 1/5 9:00
とかだと水曜と木曜にあるのですが、時間外なので水曜・木曜のフラグはたたせたくありません。こういう判定とかできるのかと思い質問しました。

しかし、カラムをもう少し整理したほうがいいですかね。

お礼日時:2010/01/07 01:49

sunday , monday , tuesday ・・・


というフィールドをつくるのはSQL的ではないですね。
dayofweekなどのフィールドをつくって、0=月、1=火、... 6=日
と入れておいた方が効率的です。
(MySQL的には0は月曜日です)

>日付から曜日を割り出し

SELECT weekday(now());

ただしチューニングを考えたらフィールドを用意する方がいいかも
    • good
    • 0
この回答へのお礼

曜日は単一ではなくて、複数保持したかったので個別にフラグ立てようと思いこういう形にしました。

>SELECT weekday(now());
ありがとうございます。日付から曜日を出すことができました。
また、質問があるのですが

質問文にある
>毎週月・水・木曜 10:00~12:00
>1/4 14:00 ~ 1/10 10:00
これでいうと、月曜の14時から始まっているのですが10:00~12:00に入ってないので月曜はフラグ立てたくないんですが、判別する方法とかあるんでしょうか・・・。

また、1/4~1/10の曜日を出したいんですが、BETWEENみたいなものないのでしょうか。1日1日出そうとするとかなり長い式になってしまうので・・・。

お礼日時:2010/01/05 23:29

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