动态,在 mysql 中的 Where 子句中使用 Case 语句

Dynamic , Using a Case Statement in a Where Clause in mysql

我卡在 case 语句中的动态 where 子句上。

我需要什么

我用这个的时候

SELECT col1,col2,col3
FROM Recharge r INNER join ft f ON f.date=r.date
WHERE f.Date LIKE 
CASE WHEN f.Date  BETWEEN (last_day(curdate() - interval 1 month) + interval 1 day) AND last_day(curdate())  
                  THEN f.Date  ELSE f.date between subdate(curdate(),interval 1 month) and (last_day(curdate() - interval 1 month)) END
ORDER BY f.id desc;

语法错误,但改为“2022-04%”。

SELECT col1,col2,col3

FROM Recharge r INNER join ft f ON f.date=r.date
WHERE f.Date LIKE 
CASE WHEN f.Date  BETWEEN (last_day(curdate() - interval 1 month) + interval 1 day) AND last_day(curdate())  
                  THEN f.Date  ELSE '2022-04%' END
ORDER BY f.id desc;

它是正确的,但我想更改 dynamically.how 我能做到吗? 我的意思是 当我 运行 时,查询包括 1-4-2022 到 30-4-2022 的日期。 我的数据库快照包含月初的昨天数据我有问题。

case 语句只能return一个值,不能是一个范围。如果我理解正确的话,只是开始日期发生了变化,所以我们只需要在案例陈述中决定开始日期。如果结束日期也发生变化,我们将需要第二份案例陈述。 然而,看起来一个简单的测试会 return 相同的结果

SELECT col1,col2,col3
FROM Recharge r INNER join ft f ON f.date=r.date
WHERE f.Date BETWEEN
curdate() - interval 1 month
  AND
last_day(curdate())
ORDER BY f.id desc;

Re-reading你的解释我觉得你很想要

SELECT col1,col2,col3
FROM Recharge r INNER join ft f ON f.date=r.date
WHERE month(f.date) = month(curdate() - interval 1 day)
AND year(f.date) = year(curdate() - interval 1 day )
ORDER BY f.id desc;

db<>fiddle here