別の日付との日付日付(2010年9月13日)のように日付けされた日付に、 (30-SEP-16)のように月末の日付として列挙された別のテーブル?左側の任意の日付から右側の月末日を持つ2つのテーブルを結合する
表1 - 取引日: '2016年9月13日' 表2 - 毎月の日付:'30 -sep-16'
別の日付との日付日付(2010年9月13日)のように日付けされた日付に、 (30-SEP-16)のように月末の日付として列挙された別のテーブル?左側の任意の日付から右側の月末日を持つ2つのテーブルを結合する
表1 - 取引日: '2016年9月13日' 表2 - 毎月の日付:'30 -sep-16'
あなたは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()
を使用して日付に変換し、上記のクエリのロジックに従うことができます。
日は常に月の最後の日である場合は、あなただけの左側にlast_day()
機能を使用することができます。
... where last_day(t1.transaction_date) = t2.monthly_date
しかし、monthy_date
は「純粋な」日がある場合は、この唯一の作品(と時間は00:00:00に設定されています)。
30-SEP-16は月末の日付ではありません。 月と年が等しい場合や、月末の特定のことをしたい場合に参加しますか? @Kacper。 – Kacper
。 。 。 2016-09-30 *は私がよく知っているカレンダーの月末です。 –
@GordonLinoffあなたは絶対に正しいですが、私はSEPを見ましたが、AUGを読んでいます。しかし、まだ私は結合条件を理解していない。 – Kacper