输出本月的所有发票

时间:2018-11-03 23:07:47

标签: sql oracle

我希望提取报表运行当月已过帐的所有发票。它必须很简单,这是我所忽略的。我在ORACLE数据库上。

我在想:

Select * from Invoice inv 
WHERE inv.post_date between to_date ('FIRST_OF_THE_MONTH', 'MM/DD/YYYY') 
                        and to_date ('LAST_OF_THE_MONTH',  'MM/DD/YYYY')

当然,FIRST_OF_THE_MONTHLAST_OF_THE_MONTH不是真实的事物。对吧?

2 个答案:

答案 0 :(得分:2)

在数据库(尤其是Oracle)中使用date时必须非常小心。 Oracle将时间成分作为date数据类型的一部分。因此,您应避免使用between

相反,将逻辑写为:

select i.*
from Invoice i 
where i.post_date >= trunc(sysdate, 'MON') and
      i.post_date < add_months(trunc(sysdate, 'MON'), 1);

无论post_date是否具有时间分量,此逻辑均有效,因此更安全。

答案 1 :(得分:0)

如果需要当前月份的最后一个,可以使用TRUNCSYSDATE来获取月份的开始时间。您可以这样做:

Select * from Invoice inv 
WHERE inv.post_date between TRUNC( SYSDATE, 'MONTH' )
                        and ADD_MONTHS( TRUNC( SYSDATE, 'MONTH' ) + 1 )