如何使用 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
我有一个 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