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