繁体   English   中英

动态,在 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;

这是正确的,但我想动态改变。我该怎么做。 我的意思是,当我运行查询时,包括 1-4-2022 到 30-4-2022 的日期。 我的数据库快照包括月初的昨天数据我有问题。

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

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;

重读你的解释我认为你真的想要

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<> 在这里摆弄

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM