mysql - 在 WHERE 子句和 BETWEEN 运算符中使用 CASE 表达式

标签 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 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

关于mysql - 在 WHERE 子句和 BETWEEN 运算符中使用 CASE 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16129181/

相关文章:

php - MYSQL SELECT DISTINCT 在结果集中有附加列

mysql - 使用 MySQL 从字段中删除字符串

mysql - SQL,COUNT 在我的 mysql 查询中不起作用

mysql - 使用分组最大 MYSQL 更新表?

java - 如何在 Android 上查询 ContentProvider 的值不为 null?

mysql - 使用内连接显示两个表的所有属性 - SQL

mysql - 返回 JOIN 查询中列的 SUM

javascript - 使用 PHP 和 AJAX 从表中加载数据

sql - IBM AS400 与 SQL Server 数据库之间的数据集成

sql - 根据列查询找出存储过程