如何在日期列出爲日期的日期(例如(9/13/2016)到另一日期另一個列表顯示爲月結束日期,例如(30-SEP-16)?將左邊任意日期的兩張表加入右邊月底日期
表中的一個 - 交易日: '2016年9月13日' 表中的兩個 - 每月日期:'30 -sep-16'
如何在日期列出爲日期的日期(例如(9/13/2016)到另一日期另一個列表顯示爲月結束日期,例如(30-SEP-16)?將左邊任意日期的兩張表加入右邊月底日期
表中的一個 - 交易日: '2016年9月13日' 表中的兩個 - 每月日期:'30 -sep-16'
您可以使用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()
將它們轉換爲日期並遵循上述查詢中的邏輯。
如果日期始終是該月的最後一天,你可以使用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