Mysql 在WHERE子句和BETWEEN运算符中使用大小写表达式
我正在尝试根据以下条件从表中获取一些行:Mysql 在WHERE子句和BETWEEN运算符中使用大小写表达式,mysql,sql,Mysql,Sql,我正在尝试根据以下条件从表中获取一些行: 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 su
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 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
试试这个
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()
语句将只返回两个可能的值:1
和0
实际上它起作用了,我就是不明白。CASE不应该返回值而不是表达式吗?!