2016-10-29 59 views
1

如何在日期列出爲日期的日期(例如(9/13/2016)到另一日期另一個列表顯示爲月結束日期,例如(30-SEP-16)?將左邊任意日期的兩張表加入右邊月底日期

表中的一個 - 交易日: '2016年9月13日' 表中的兩個 - 每月日期:'30 -sep-16'

+0

30-SEP-16不是月底日期。 你想在月份和年份相等時加入,或者你想在月份的最後一天做某些特定的事情嗎? – Kacper

+0

@Kacper。 。 。 2016-09-30 * *是我熟悉的日曆月份的結尾。 –

+0

@GordonLinoff你是絕對正確的,我見過SEP但讀過AUG。但我仍然不明白加入條件。 – Kacper

回答

0

您可以使用trunc()。以下是一種方法:

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)。