gpt4 book ai didi

sql - DB2/400 select * 有效,但 count(*) 无效

转载 作者:行者123 更新时间:2023-12-02 15:08:15 25 4
gpt4 key购买 nike

我在尝试检索保险系统的一些记录时遇到了一个奇怪的现象。当我说 select 时,查询似乎会运行,但当我进行计数()时,它会提示日期格式。一点背景知识,我们的日期以两种方式之一存储为整数(是的,我知道这很可怕)。 YYMMDD 表示 2000 年之前的年份,CYYMMDD 表示 1999 年。

  1. 1999 年 10 月 21 日变为 991021
  2. 2000 年 10 月 21 日变为 1001021。

这是下面的代码,我已经评论了哪些有效,以及当无效时包含的错误。1980 年左右的 IBM 是一个充满了执行不力的想法的妓院。

    -- returns rows correctly
select * from mudata.hdk01
where date(to_date(to_char(A08 + 19000000, '99999999'), 'YYYYMMDD')) < '01/01/1999'
fetch first 100 rows only;

-- refuses with error
-- java.sql.SQLException: [SQL0181] Value in date, time, or timestamp string not valid.
-- Query 1 of 1, Rows read: 0, Elapsed time (seconds) - Total: 0.093, SQL query: 0.093, Reading results: 0
select count(*) from mudata.hdk01
where date(to_date(to_char(A08 + 19000000, '99999999'), 'YYYYMMDD')) < '01/01/1999'
fetch first 100 rows only;

最佳答案

创建以下 SQL UDF:

CREATE OR REPLACE FUNCTION TO_DATE_SAFE (P_DT INT)
RETURNS DATE
DETERMINISTIC
NO EXTERNAL ACTION
BEGIN
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
RETURN date(to_date(to_char(P_DT + 19000000, '99999999'), 'YYYYMMDD'));
END

并使用以下语句查找具有违反规则的值的行:

select A08 
from mudata.hdk01
where to_date_safe(A08) is null and A08 is not null

关于sql - DB2/400 select * 有效,但 count(*) 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58125328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com