如何将外部联接保留在列为日常日期的日期(2016年9月13日)到另一个表中作为月结束日期的另一个日期(30-SEP-16)?< / p>
表一 - 交易日期:'9/13/2016' 表二 - 月度日期:'30 -SEP-16'
答案 0 :(得分: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()
将它们转换为日期并按照上述查询中的逻辑进行操作。
答案 1 :(得分:0)
如果日期始终是该月的最后一天,您可以使用左侧的last_day()
功能:
... where last_day(t1.transaction_date) = t2.monthly_date
然而,只有monthy_date
是纯粹的&#34;日期(时间设置为00:00:00)。