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

how to fetch rows from table using difference between months (say 14 months) between two dates columns using plsql

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

我必须从 table 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 returns 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  

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

感谢支持,已解决

我可以这样用

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