问题描述
我有一个简单的查询来从 SYSIBM/SYSDUMMY1 中提取 DAYOFWEEK,以确定是否清除跟踪昨天销售的表。
DELETE FROM DAILYSALES WHERE (CASE WHEN (SELECT DAYOFWEEK(CURRENT DATE)
FROM SYSIBM/SYSDUMMY1)
BETWEEN 3 AND 6 THEN 'YES' ELSE 'NO' END) = 'YES';
由于周一 (dayofweek=2) 运行的报表需要周五 (dayofweek=6)、周六 (dayofweek=7)、周日 (dayofweek=1) 的销售额(today-1 来计算日期),这似乎是合乎逻辑的我应该会看到第 6、7 和 1 天的销售数据。
但是,它似乎保留了周四 (dayofweek=5) 的销售额,并且在周一早上运行时不会拉动周日的销售额 (dayofweek=1)。这让我相信 SYSDUMMY1 使用的日期直到午夜过后很久才会翻转,即使我们的系统日期在美国东部标准时间午夜翻转。
它在本周剩余时间运行良好,提供了“昨天”的正确销售数据。当我从 SYSIBM.SYSDUMMY1 手动运行 Select DAYOFWEEK(current date) 时,它总是显示正确的星期几。我错过了什么?
解决方法
我在 DAILYSALES 中没有看到任何列的相关性(使用)..
因此
(CASE WHEN (SELECT DAYOFWEEK(CURRENT DATE)
FROM SYSIBM/SYSDUMMY1)
BETWEEN 3 AND 6 THEN 'YES' ELSE 'NO' END)
仅评估一次,如果流程在周一运行,将返回 2
==>NO
,因此不会删除任何行。
我怀疑您想要的是 DAYOFWEEK(CURRENT DATE)
而不是 DAYOFWEEK(SALESDATE)
,其中 SALESDATE
是 DAILYSALES 表中的一列。
最后注意 SYSIBM.SYSDUMMY1 只有一个 char(1) 列 IBMREQ
和一行,该列的值设置为“Y”。此表中的任何内容都没有更新过。