繁体   English   中英

SQL多个AND语句

[英]SQL multiple AND statements

问题是我想列出在所选月份(例如,2015年10月31日)未付款的订单

这意味着:
列出从开始到31.10的所有订单
AND date_payed BETWEEN(1.11-今天)AND支付日期= NULL或1970年之前

$ sel_date = 10-2015(所选日期)
$ s3 = 11-2015 //在这种情况下

from
  octt_order 
  WHERE order_status_id >= 1 
  AND (date_format(date_added,'%m-%Y') BETWEEN '11-2010' AND '$sel_date')
  AND (date_payed BETWEEN STR_TO_DATE('$s3','%m-%Y') AND STR_TO_DATE('11-2300','%m-%Y') OR date_payed is NULL)

  ORDER BY date_format(date_added,'%Y/%m/%d') ASC");

第一个BETWEEN不比较日期,而是比较字符串。 因此,“ 02-2000”将在“ 03-2000”之前,但在“ 02-2020”之后,这可能不是您想要的。 比较日期(例如第二个BETWEEN中的日期)以解决此问题。

第二个BETWEEN看起来可以用更多的括号括起来,但是如果操作符优先级对您有利,那么您可能会放弃版本。

您的订购依据不必将日期转换为字符串。 ORDER BY date_added就可以了。

知道您想要什么,得到什么以及问题出在哪里会有所帮助。

您应该使用日期数据类型(而不是字符串)进行所有日期算术和比较。 如果必须使用字符串,请使用ISO标准格式:YYYY-MM-DD或YYYYMMDD。

因此,您应该将比较切换为使用日期,并使用类似以下的逻辑:

FROM octt_order 
WHERE order_status_id >= 1 AND
      date_added >= '2010-11-01' AND
      date_added < STR_TO_DATE(CONCAT('$seldate', '-01'), '%m-%Y-%d') + interval 1 month AND
      date_payed >= STR_TO_DATE(CONCAT('$s3', '-01'), '%m-%Y-%d') + interval 1 month AND
      (date_payed < '2300-12-01' or date_payed is null)
ORDER BY date_added asc

这是我的解决方案

octt_order 
  WHERE order_status_id >= 1 


  AND (date_added BETWEEN STR_TO_DATE('01-2001','%m-%Y') AND STR_TO_DATE('$s3','%m-%Y'))
  AND (date_payed BETWEEN STR_TO_DATE('$s3','%m-%Y') AND STR_TO_DATE('11-2300','%m-%Y') OR date_payed is NULL)     

  ORDER BY date_format(date_added,'%Y/%m/%d') ASC");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM