2016-10-29 17 views
1

別の日付との日付日付(2010年9月13日)のように日付けされた日付に、 (30-SEP-16)のように月末の日付として列挙された別のテーブル?左側の任意の日付から右側の月末日を持つ2つのテーブルを結合する

表1 - 取引日: '2016年9月13日' 表2 - 毎月の日付:'30 -sep-16'

+0

30-SEP-16は月末の日付ではありません。 月と年が等しい場合や、月末の特定のことをしたい場合に参加しますか? @Kacper。 – Kacper

+0

。 。 。 2016-09-30 *は私がよく知っているカレンダーの月末です。 –

+0

@GordonLinoffあなたは絶対に正しいですが、私はSEPを見ましたが、AUGを読んでいます。しかし、まだ私は結合条件を理解していない。 – Kacper

答えて

0

あなたはtrunc()を使用することができます。 1つの方法があります:

select . . . 
from t1 join 
    t2 
    on trunc(t1.transactiondate, 'MON') = trunc(t2.monthlydate, 'MON'); 

これは、両方の日付を月の初めに変換します。

一部のデータベースでは、ジョイン条件の両側で関数を使用することに注意します。このような関数は、索引の使用を排除する可能性があります。しかし、Oracleでは、式に索引を簡単に定義でき、効率的になります。

あなたはまた、などの条件を記述することができます。日付が実際に文字列として保存されている場合は、その後、

select . . . 
from t1 join 
    t2 
    on t1.transactiondate >= trunc(t2.monthlydate, 'MON') AND 
     t1.transactiondate < t2.monthlydate + 1; 

(あなたはtransactiondate時間がないコンポーネントを持っていないことがわかっている場合、あなたはt1.transactiondate <= t2.monthlydateを使用することができます。)

to_date()を使用して日付に変換し、上記のクエリのロジックに従うことができます。

0

日は常に月の最後の日である場合は、あなただけの左側にlast_day()機能を使用することができます。

... where last_day(t1.transaction_date) = t2.monthly_date 

しかし、monthy_dateは「純粋な」日がある場合は、この唯一の作品(と時間は00:00:00に設定されています)。

関連する問題