質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

SQL

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

Q&A

解決済

1回答

3023閲覧

SQL 一定期間内のデータを検索

hkrkgyk7

総合スコア26

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

SQL

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

0グッド

0クリップ

投稿2018/08/28 11:56

編集2018/08/28 23:44

SQL初心者です。

下記の条件のデータを抽出したいです。
自分でも調べていますが、期間の幅の起点となる日付が指定されている場合の構文は出てきますが、指定しない場合の構文は見つけられず…。
どのような構文になるかご教示いただけますと幸いです。

<抽出したいデータ>
テーブルAのデータのうち、日付項目Bと日付項目Cの期間の差が6ヶ月(180日)のデータを抽出したい。
※SYSDATEや”20200101”のように期間の幅の起点となる日付を指定しない場合のSQLが知りたいです

<例>
システム:スポーツジムの顧客管理システム
テーブル:顧客テーブル
日付項目:加入日(形式:yyyymmdd)
日付項目:脱退日(形式:yyyymmdd)

加入期間が6ヶ月(180日)の顧客データを抽出したい
※加入日および脱退日の指定はない
※データ数の多いテーブル
全てのデータを対象として指定条件で抽出したい
→例えば、以下のようなデータを1本のSQLで参照したいです
①加入日”20000101”〜脱退日”20000630”
②加入日”20150701”〜脱退日”20151231”

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

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

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

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

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

hkrkgyk7

2018/08/28 12:06

ご指摘ありがとうございます。分かる範囲ではありますが、追加します。
hichon

2018/08/28 12:18

「加入期間が6ヶ月」の正確な定義を教えて下さい。
Orlofsky

2018/08/28 12:20

過去の質問を放置したままだとコメントしてくれる人はだんだん少なります。
hkrkgyk7

2018/08/28 14:14

説明不足で申し訳ないです。加入期間が6ヶ月→1ヶ月を30日として180日
hkrkgyk7

2018/08/28 14:16

過去の質問をクローズしました。数年前、使い方が分からないまま質問していたので、投げっぱなしになっていましたね・・・
guest

回答1

0

ベストアンサー

ではヒントを。
加入から6ヶ月経ったかはADD_MONTHS(加入日, 6) で取得できます。後は自力で頑張ってみてください。それでもわからなければ改めて質問してください。

マニュアルはSQL言語リファレンスです。

追記

SQL

1SQL> SELECT SYSDATE - 1 AS YESTERDAY, SYSDATE, SYSDATE + 1 AS TOMORROW FROM DUAL ; 2 3YESTERDAY SYSDATE TOMORROW 4------------------- ------------------- ------------------- 52018/08/28 04:19:32 2018/08/29 04:19:32 2018/08/30 04:19:32

なのでDATE型列 + 180 で 180日後を取得できます。Oracle SQL入門で1冊本を買って熟読されては?

投稿2018/08/28 12:17

編集2018/08/28 19:22
Orlofsky

総合スコア16415

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

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

hkrkgyk7

2018/08/28 23:32

回答ありがとうございます。 SYSDATEのように、期間の幅の起点となる日付が指定されている場合は、そこからxx日という指定ができます。 質問はその起点となる日付が指定されない場合のSQLです。自分でも調べていますが見当たらないですね…。
ktamon

2018/08/28 23:42

日付項目:加入日(yyyymmdd) 日付項目:脱退日(yyyymmdd) 要は、脱退日-加入日>=180を出したいということですよね。 TO_DATE(脱退日,'YYYY/MM/DD')等で日付型に変換するなりしてOrlofskyさん回答の様に計算した結果をWhereで条件にするでは駄目でしょうか?
Orlofsky

2018/08/28 23:59

加入日、脱退日がDATE型で、脱退していなければ脱退日がNULLとして WHERE NVL(脱退日, SYSDATE) - 加入日 >= 180 hkrkgyk7さんの他の質問へのコメントを良く読みましょう。この中にヒントがいっぱいあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問