Sql 本月输出所有发票

Sql 本月输出所有发票,sql,oracle,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') 当然,本月的第一个和本月的最后一个都不是真实

我希望提取报告运行当月已过账的所有发票。这一定很简单,我忽略了这一点。我在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')

当然,
本月的第一个
本月的最后一个
都不是真实的东西。对吗?

如果您想要当前月份的最后一个月,您可以使用
TRUNC
SYSDATE
来获取月初。你可以做:

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

在数据库中,尤其是在Oracle中使用
date
s时,必须非常小心。Oracle有一个时间组件作为
date
数据类型的一部分。因此,您应该避免在之间使用

相反,将逻辑编写为:

select i.*
from Invoice i 
where i.post_date >= trunc(sysdate, 'MON') and
      i.post_date < add_months(trunc(sysdate, 'MON'), 1);
选择i*
从发票一
其中i.post_date>=trunc(sysdate,'MON'),并且
i、 发布日期<添加月份(trunc(sysdate,'MON'),1);
无论
post_date
是否包含时间成分,此逻辑都有效,因此更安全