簡體   English   中英

在WHERE子句和BETWEEN運算符中使用CASE表達式

[英]using CASE expression in the WHERE clause and BETWEEN operator

我試圖根據某些條件從我的表中獲取一些行,如下所示:

SELECT * FROM MyTable WHERE Date BETWEEN 
CASE dayofweek(curdate())
when 1 then curdate() AND adddate(curdate(), interval 6 day)
when 2 then subdate(curdate(), interval 1 day) AND adddate(curdate(), interval 5 day)
when 3 then subdate(curdate(), interval 2 day) AND adddate(curdate(), interval 4 day)
when 4 then subdate(curdate(), interval 3 day) AND adddate(curdate(), interval 3 day)
when 5 then subdate(curdate(), interval 4 day) AND adddate(curdate(), interval 2 day)
when 6 then subdate(curdate(), interval 5 day) AND adddate(curdate(), interval 1 day)
when 7 then subdate(curdate(), interval 6 day) AND curdate()
END

但由於某種原因它不起作用。 它給了我一個語法錯誤。 我應該如何完成這樣的事情?

試試這個,

SELECT * 
FROM MyTable 
WHERE  1 = 
    CASE dayofweek(curdate())
        when 1 then Date BETWEEN curdate() AND adddate(curdate(), interval 6 day)
        when 2 then Date BETWEEN subdate(curdate(), interval 1 day) AND adddate(curdate(), interval 5 day)
        when 3 then Date BETWEEN subdate(curdate(), interval 2 day) AND adddate(curdate(), interval 4 day)
        when 4 then Date BETWEEN subdate(curdate(), interval 3 day) AND adddate(curdate(), interval 3 day)
        when 5 then Date BETWEEN subdate(curdate(), interval 4 day) AND adddate(curdate(), interval 2 day)
        when 6 then Date BETWEEN subdate(curdate(), interval 5 day) AND adddate(curdate(), interval 1 day)
        when 7 then Date BETWEEN subdate(curdate(), interval 6 day) AND curdate()
    END

在這種情況下, CASE()語句將僅返回兩個可能的值: 10

CASE返回一個 ,而不是表達式 您必須在BETWEEN的每一側重復CASE語句:

SELECT * FROM MyTable
WHERE Date BETWEEN 
  CASE dayofweek(curdate())
    when 1 then curdate()
    when 2 then subdate(curdate(), interval 1 day)
    ... etc
  END
AND -- this is the "AND" for the BETWEEN values
  CASE dayofweek(curdate())
  when 1 then adddate(curdate(), interval 6 day)
  when 2 then adddate(curdate(), interval 5 day)
  ... etc
END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM