簡體   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