如何使用plsql使用两个日期列之间的月差(比如14个月)从表中提取行



我有一个表po010,其中的列是polref、POLCRCDTE、PUPDTE。

我必须从表po010中获取polref,其中,POLCRCDTE和PUPDTE之间的月差是最近14个月。

我的尝试是。

SELECT polref,POLCRCDTE,PUPDTE FROM po010,
    GROUP BY polref
    HAVING months_between(pck_utility.f_dtcnv(POLCRCDTE),pck_utility.f_dtcnv(PUPDTE))>14 

注意:POLCRCDTE和PUPDTE是数字格式,pck_utility.f_dtcnv以数字格式作为输入,以date格式返回日期。

第二次尝试是

DECLARE 
sysdte DATE;
req_dt DATE;
BEGIN
SELECT system_dt INTO sysdte  FROM cs340;
SELECT add_months(sysdte, -14) INTO req_dt FROM po010;
dbms_output.put_line(req_dt);
select * from po010 where pupdte <= pck_utility.f_dtcnv((add_months      (sysdte ,-14)));

结束;

注意:这里取cs340中的system_dt,因为在其他场景中,我必须比较这两者之间的日期。

请帮帮我。

两个代码都有错误。第一个错误是ORA 00900第二个是给ORA 06550.

基本上,我需要这个结果集在一个游标中,我需要在一个过程中使用它。

HAVING用于根据聚合筛选结果,months_between()不是聚合函数。

也许您只是想使用WHERE:

SELECT DISTINCT polref,POLCRCDTE,PUPDTE 
FROM po010
WHERE  months_between(pck_utility.f_dtcnv(POLCRCDTE)
                     ,pck_utility.f_dtcnv(PUPDTE)
                     )>14  

您通常需要SELECT列表中的每个非聚合字段GROUP BY,我不确定您对GROUP BY子句的要求是什么,所以我删除了它,并在SELECT列表中使用了DISTINCT

感谢您的支持,b现在已经解决了。

我可以这样使用。

SELECT DISTINCT p.polref,
                p.polcrcdte,
                c.system_dt
FROM   ddl00.po010 p,
       ddl00.cs340 c
WHERE  Months_between(pck_utility.F_dtcnv(polcrcdte), system_dt) >= 14 

最新更新