SQL查询需求:筛选指定交付/退货日期及退货为空的账户记录
正确SQL语句修正
先明确你现有代码和需求的核心矛盾:需求要求交付日期晚于日期x,但你写的delivered <= '$end'是筛选交付日期早于等于$end的记录,完全和需求相反,这直接导致符合退货日期条件的记录被过滤。
结合你给出的示例参数($start = '2024-03-01'、$end = '2024-03-31'),假设需求里的“日期x”对应$start,修正后的SQL如下:
SELECT * FROM charges WHERE ship_to = '$shipper' AND delivered > '$start' -- 改为大于指定日期,匹配"交付日期晚于日期x"的需求 AND ((returned BETWEEN '$start' AND '$end') OR (returned IS NULL));
如果你的“日期x”是独立于$start/$end的变量(比如单独的$x),则调整为:
SELECT * FROM charges WHERE ship_to = '$shipper' AND delivered > '$x' AND ((returned BETWEEN '$y' AND '$z') OR (returned IS NULL));
错误原因说明
原代码的delivered <= '$end'会排除所有交付日期晚于$end的记录,而你期望的那两条退货日期在3月内的记录,大概率是因为交付日期晚于2024-03-31,被这个错误条件过滤掉了。修正交付日期的比较运算符后,就能同时返回退货日期在指定区间和退货日期为NULL的记录。
内容的提问来源于stack exchange,提问作者OT_Edge
相关产品推荐
相关产品推荐

