如何从第一次约会以来获得ORACLE的当月记录。

时间:2014-02-27 06:39:04

标签: sql oracle

这是我的代码

SELECT h.ENTERED_DATE,
       d.DENOMINATION,
       sum(h.invoice_total-h.TOTTAL_DISCOUNT)as amount 
  FROM sales_details d
       LEFT JOIN sales_header h 
            ON d.invoice_id=h.invoice_id
 WHERE entered_by='2254'
--HERE IS NEED TO GET DETAILS CURRENT MONTH 1st Date to Sysdate 
GROUP BY 
       ENTERED_DATE,
       d.DENOMINATION
ORDER BY 
       entered_date,
       denomination
  • 在我的应用程序中,只发送 sysdate 作为参数。 无需SYSDATE-30。 需要第一个日期到SYSDATE

这里显示了我的两张桌子 sales_header表 enter image description here

sales_details表 enter image description here

5 个答案:

答案 0 :(得分:6)

试试这个:

WHERE entered_by='2254'
AND ENTERED_DATE BETWEEN trunc (sysdate, 'mm')/*current month*/ AND SYSDATE

答案 1 :(得分:5)

比较条件

的月份

WHERE to_char( sysdate, 'mm' ) = to_char( ENTERED_DATE, 'mm' )

另外

WHERE EXTRACT(month FROM sysdate)=EXTRACT(month FROM ENTERED_DATE)

答案 2 :(得分:2)

穆达西尔的回答对我有用,但我也会检查这一年,以确保你没有获得去年的记录。

WHERE TO_CHAR(ENTERED_DATE, 'mm') = TO_CHAR(SYSDATE, 'mm')
  AND TO_CHAR(ENTERED_DATE, 'yyyy') = TO_CHAR(SYSDATE, 'yyyy')

此外,如果您正在运行大型查询,WHERE子句中的函数可能会降低它的速度。如果是这样,您可能需要考虑基于函数的索引。

答案 3 :(得分:1)

尝试:

SELECT TRUNC(SYSDATE, 'month') FROM DUAL;

答案 4 :(得分:0)

select 'WITHIN' as result 
from dual
where '28-FEB-2019' between trunc(last_day(add_months(sysdate, -1))+1) and trunc(last_day(sysdate));

请注意,因为有许多示例仅使用月份,因此您可以获取全年的记录,因此不考虑年份。 另外,正如您所看到的,我正在使用trunc,这是为了避免时间不一致,而只是使用日期。