gpt4 book ai didi

mysql - 在 SQL 中使用日期范围

转载 作者:行者123 更新时间:2023-11-29 08:01:35 25 4
gpt4 key购买 nike

我通过 Excel 通过 ODBC 连接访问 SQL 和数据库。这样我就可以创建可刷新的报告。在使用日期 Between 条件时,我使用?,这样我就可以经常在不同的日期范围内使用此报告。

问题是,当我使用 OR 条件时,我最终不得不输入日期范围 4 次,或者输入 8 个不同的日期。有没有办法简化下面的内容,这样我就不必多次输入日期?

 Select CFF2X AS TYPE, Count(*) AS COUNT
FROM ZBP602F.SIH
JOIN ZBP602UF.NRCMCVL1 ON SICUST=CUSTX
WHERE SIINVD BETWEEN ? AND ? AND SICOMP IN (01, 03, 06) and SITOT <> 0 and CFF2X <> (' ') AND IHOCLS IN (004, 800, 007, 100, 008, 102, 104, 140, 105, 110, 111,109)
OR SIINVD BETWEEN ? AND ? AND SICOMP IN (01, 03, 06) and SITOT <> 0 and CFF2X = (' ') AND IHOCLS IN (004, 800, 007, 008, 100, 102, 104, 140, 105, 110, 111)
OR SIINVD BETWEEN ? AND ? AND SICOMP IN (01, 03, 06) and SITOT <> 0 AND IHOCLS IN (114) and SIPAY in ('A', 'E')
OR SIINVD BETWEEN ? AND ? AND SICOMP IN (01, 03, 06) and SITOT <> 0 AND IHOCLS IN (114) and SIPAY = 'B' and CFF2X <> (' ')
Group by CFF2X

最佳答案

WHERE SIINVD BETWEEN ? AND ? AND SICOMP IN (01, 03, 06) AND SITOT <> 0
AND (
(CFF2X <> ' ' AND
IHOCLS IN (004, 800, 007, 100, 008, 102, 104, 140, 105, 110, 111,109)
)
OR (CFF2X = ' ' AND
IHOCLS IN (004, 800, 007, 008, 100, 102, 104, 140, 105, 110, 111)
)
OR (IHOCLS = 114 and SIPAY in ('A', 'E'))
OR (IHOCLS = 114 and SIPAY = 'B' and CFF2X <> ' ')
)

您只需将不变的项目放入一次,然后将变化的位作为几个 OR 语句放入即可。像这样简化 bool 逻辑的过程称为逻辑约简(想想卡诺图)。您还可以在此处执行其他优化。

关于mysql - 在 SQL 中使用日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23663634/

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