- 締切済み
日付間の判定について
質問させてください。 PostgreSQLで以下のテーブルがあるとします。 test_tbl ---------------------------- id==========int4 start_day===timestamp end_day=====timestamp ----------------------------- 以下のテーブルにデータをinsertしたいとかんがえています。 このとき、既に入力されているデータの start_day, end_dayにかぶらずに入力したいとかんがえています。 たとえば ---------------------------- record1 ---------------------------- start_day:2003-11-27 18:00:00 end_day :2003-11-27 18:15:00 ---------------------------- record2 ---------------------------- start_day:2003-11-27 18:45:00 end_day :2003-11-27 19:00:00 ----------------------------- というレコードが既にtest_tblに格納されていたら、 ---------------------------- insert1(●) ---------------------------- start_day:2003-11-27 18:20:00 end_day :2003-11-27 18:40:00 ----------------------------- insert2(●) ---------------------------- start_day:2003-11-27 17:45:00 end_day :2003-11-27 17:50:00 ----------------------------- insert3(×) ---------------------------- start_day:2003-11-27 18:05:00 end_day :2003-11-27 18:30:00 ----------------------------- insert4(×) ---------------------------- start_day:2003-11-27 18:50:00 end_day :2003-11-27 19:20:00 ----------------------------- insert5(×) ---------------------------- start_day:2003-11-27 18:30:00 end_day :2003-11-27 19:20:00 ----------------------------- 上記の判別するSQLがうまくつくれません。 どうかアドバイスを下さい。宜しくおねがいいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- tsukasa-12r
- ベストアンサー率65% (358/549)
要は、insert しようとしているデータの start_day、end_day が、既に存在しているレコードの startday と end_day の間に入ってはいけない、ということですよね? insert しようとしているデータを new_start_day、new_end_day とすると、例えば select count(*) into c1 from test_tbl where start_day <= new_start_day and new_start_day <= end_day; select count(*) into c2 from test_tbl where start_day <= new_end_day and new_end_day <= end_day; if 0 < c1 or 0 < c2 then -- insert 不可 else -- insert 可能 end if; こんな感じの処理で判定できるのではないでしょうか?