0
我遇到一个查询问题,如果使用硬编码日期运行,会将正确数量的行插入表(170K +)中。问题是,当我尝试自动化时,通过用日期函数替换硬编码的日期,查询将只将一行插入到新截断的表中。Netezza TO_CHAR函数没有正确评估?
实施例硬编码日期:“20150401”
样品同日的,使用日期功能:
TO_CHAR(last_day(add_months(now(), -3))+1, 'YYYYMMDD')
上面TO_CHAR函数返回所需的结果,当分开运行。
这里是被插入,结果在一个单行查询的清理后的版本:
INSERT INTO SCHEMA.INSERT_TABLE(
SELECT TO_CHAR(now(), 'YYYYMM') TRAN_MONTH,
SUM(CASE WHEN B.DATE = TO_CHAR(last_day(add_months(now(), -3))+1, 'YYYYMMDD')
THEN 'Do stuff'
END) AS Stuff1,
SUM(CASE WHEN B.DATE = TO_CHAR(last_day(add_months(now(), -3))+1, 'YYYYMMDD')
THEN 'Do other stuff'
END) AS Stuff2,
SUM(CASE WHEN B.DATE = TO_CHAR(last_day(add_months(now(), -3))+1, 'YYYYMMDD')
THEN 'Do really weird stuff'
END) AS Stuff3,
SUM(CASE WHEN B.DATE = TO_CHAR(last_day(add_months(now(), -3))+1, 'YYYYMMDD')
THEN 'Do really really weird stuff'
END) AS Stuff4,
SUM(CASE WHEN A.CODE= 1
THEN 'Do ... '
END) AS Stuff5,
FROM
(SELECT Col1, Col2... FROM Table_A) A,
(SELECT Col1, Col2... FROM Table_B) B,
(SELECT Col1, Col2... FROM Table_C) C,
(SELECT Col1, Col2... FROM Table_D) D,
(SELECT Col1, Col2... FROM Table_E) E,
WHERE 'Conditions for A, B, C, D, and E are met'
AND B.DATE = TO_CHAR(last_day(add_months(now(), -3))+1,'YYYYMMDD')
GROUP BY All of the things
ORDER BY Something
);
我已经做了相当多的测试和研究,但我还没有找到一个可能的原因是为什么返回的记录数量会非常大。
谢谢
贾斯汀
这里有点难以从伪代码中知道发生了什么,没有任何数据。也很难从错误/不正确的语法中分辨有意识的伪代码。如果您将每个TO_CHAR(last_day(add_months(now(),-3))+ 1,'YYYYMMDD')的实例替换为'20150401',您是否说它可行? WHERE子句显示没有格式字符串的TO_CHAR函数,所以它本身将失败。 – ScottMcG
道歉,我必须切断WHERE子句中条件语句的最后部分。无论哪种方式,我们都知道问题不在日期函数中,而是在表中。不知何故,旗帜被改变导致结果集严重受限。 @ScottMcG感谢您的回复,并纠正了我糟糕的剪贴工作。 –