【发布时间】:2021-10-31 10:19:33
【问题描述】:
所以我遇到了一个问题,我一生都无法弄清楚如何获取我正在寻找的数据。
我想要做的是获取某个日期/时间之间的数据集合,数据库设置日期和时间的方式在不同的列中,其格式化方式是日期的 yyyyMMDD 和 hhmmss时间。 (不确定这是否重要,但我只想确保我解释一切)数据位于旧的 DB2 服务器中,我使用 SSMS 中的链接服务器来提取数据。我遇到问题的部分查询是
SELECT *
FROM WM370BASD.PRTRAN00 A
WHERE
(
A.PRTXTP = '300'
AND A.PRTXCD = '003'
AND A.PREDDT >= 20210901 --BEGIN DATE
AND A.PREDDT <= 20210901 --END DATE
AND A.PREDTI >= 060000 --BEGIN TIME
AND A.PREDTI <= 140000 --END TIME
)
OR
( A.PRTXTP = '200'
AND A.PRTXCD = '001'
AND A.PREDDT >= 20210901 --BEGIN DATE
AND A.PREDDT <= 20210901 --END DATE
AND A.PREDTI >= 060000 --BEGIN TIME
AND A.PREDTI <= 140000 --END TIME
AND A.PRMNOP = 'Dir Putaway'
)
OR
( A.PRTXTP = '200'
AND A.PRTXCD = '001'
AND A.PREDDT >= 20210901 --BEGIN DATE
AND A.PREDDT <= 20210901 --END DATE
AND A.PREDTI >= 060000 --BEGIN TIME
AND A.PREDTI <= 140000 --END TIME
AND A.PRMNOP = 'Locate Cases'
)
OR
( A.PRTXTP = '200'
AND A.PRTXCD = '001'
AND A.PREDDT >= 20210901 --BEGIN DATE
AND A.PREDDT <= 20210901 --END DATE
AND A.PREDTI >= 060000 --BEGIN TIME
AND A.PREDTI <= 140000 --END TIME
AND A.PRMNOP = 'SKU Putaway'
)
OR
( A.PRTXTP = '200'
AND A.PRTXCD = '002'
AND A.PREDDT >= 20210901 --BEGIN DATE
AND A.PREDDT <= 20210901 --END DATE
AND A.PREDTI >= 060000 --BEGIN TIME
AND A.PREDTI <= 140000 --END TIME
AND A.PRMNOP = 'Pull Cases-Bulk'
)
EDIT --添加结果集
PREDTI PREDDT
60001 20210901
60005 20210901
60010 20210901
60012 20210901
60012 20210901
60013 20210901
60024 20210901
60025 20210901
60032 20210901
60042 20210901
135950 20210901
135947 20210901
135938 20210901
135937 20210901
135934 20210901
135928 20210901
135923 20210901
135923 20210901
135921 20210901
135918 20210901
只要当天是同一天,它就可以正常工作,但是如果我将它跨越一天,它不会返回任何内容....
AND A.PREDDT >= 20210821 --BEGIN DATE
AND A.PREDDT <= 20210901 --END DATE
AND A.PREDTI >= 140000 --BEGIN TIME
AND A.PREDTI <= 030000 --END TIME
我认为无论是什么问题都是小而愚蠢的,我只是忽略了它,我希望能有一双新的眼睛!
【问题讨论】:
-
您是否会有日期范围,即开始日期不等于结束日期?如果是这样,您需要将开始日期/时间对与结束日期/时间对分开处理,以确保结果正确。
-
是的,创建旧数据库的人将它们创建为整数,所以从技术上讲,它不是日期 2021/09/01,而是整数 20210901,所以从技术上讲,我得到了两个整数之间的范围。
-
我的意思是,如果您在该范围内有 不同 日期,例如1997 年 5 月 3 日至 1998 年 6 月 17 日,则您需要单独处理日期。开始时间仅适用于 1997 年 5 月 3 日。从 1997 年 5 月 4 日到 1998 年 6 月 16 日的任何时间都在该范围内,如 1998 年 6 月 17 日到结束时间的部分。您选择的时间表示可能是当地日出后作为 Unicode 罗马数字字符串的基本周期大蒜面包块的数量是一个单独的问题。