🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

Q&A

解決済

1回答

3911閲覧

SQL 期間Aが期間Bに含まれているか検索したい

PePePeT_i_C

総合スコア31

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

0グッド

0クリップ

投稿2019/10/31 07:00

いつもお世話になっております。

現在、SQLを勉強しているのですがタイトルの内容の判定ができないか試行錯誤しております。

Ex

DBに格納されているデータは、締め日、契約開始日、契約終了日、社員IDとする 15日締めの会社に 契約期間:2019/01/01 ~ 2019/03/31 の派遣社員が 各月度に存在するかを判定したい 4月度(4/16-5/15), 5月度(5/16-5/15)などは派遣社員さんの契約期間外なのでFalse 1月度(12/16-1/15), 2月度(2/16-2/15)などは派遣社員さんの契約期間内なのでTrue と出力したい

MM月16日からMM月15日が契約開始日から契約終了日に含まれているかどうかを判定したいのですが、SQLの書き方がわかりません。

yyyyMMdd between 契約開始日 and 契約終了日 というケースはわかるのですが、期間Aが期間Bに重なっているかどうかの判定はどうしたらよいでしょうか、、、
ご教授のほどよろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

期間Aが期間Bに重なっているか

年を跨ぐデータもあるので年月日で判断します。

SQL

1SELECT ... 2WHERE 期間A開始年月日 BETWEEN 期間B開始年月日 AND 期間B終了年月日 3AND 期間A終了年月日 BETWEEN 期間B開始年月日 AND 期間B終了年月日

理解を深める為に実際にデータを用意してSQLの動作を確認しては?

投稿2019/10/31 07:07

Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PePePeT_i_C

2019/10/31 07:11

ありがとうございます! 大学内のサーバにテーブルはあるのですが、期間Aが期間Bに含まれているのかの判定ができるのかが気になって質問いたしました! 明日実際に試してみたいと思います!本当にありがとうございます!
sazi

2019/10/31 07:53 編集

その回答は重なりがあるではなく含まれているです。 期間Aに対して期間Bの両端が共に内側にある状態のみですので、片側だけが含まれている場合または両端が外側という条件ですね。
Orlofsky

2019/10/31 07:57

sazi さん、フォローありがとうございます。 >SQL 期間Aが期間Bに含まれているか検索したい が回答のSQLでAND で書いた通り「含まれる」 開始か終了のどちらかが含まれていれば、つまり回答のSQLで OR にすれば「重なり」ます 。
sazi

2019/10/31 08:08 編集

いえ、それだとさらに、期間Aの両端の外側に期間Bの両端がある場合も必要です。
sazi

2019/10/31 08:11 編集

シンプルに 期間A開始年月日 <= 期間B終了年月日 and 期間A終了年月日 >= 期間B開始年月日 で良いと思うのですが。
Orlofsky

2019/10/31 12:40

sazi さん なるほど、こっちの方がシンプルですね。
PePePeT_i_C

2019/10/31 23:44

sazi さん 教えていただきありがとうございます! なるほど、、、。 数直線を書けば気が付きそうだったのにbetweenにとらわれてしまって思いつかなかったです、、、。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問