[英]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.