簡體   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