簡體   English   中英

CASE / IF語句基於參數值聲明變量

[英]CASE / IF Statement to declare variable based on parameter value

一直在研究“ CASE”語法,我想我已經接近這里需要的東西了,但是情況有些不好了。 SSMS不喜歡我用CASE編寫查詢的方式,最終使自己感到困惑,所以我在下面編寫了示例,就好像它是一個“ IF”語句一樣,只是我可以表達自己想要實現的目標。 任何提示或技巧當然將不勝感激。

目標是具有日期范圍(“上周”,“月至日期”等)的參數列表,該列表將在被選中時將兩個值(日期上限和下限)傳遞給WHERE語句。

DECLARE @Param1 VARCHAR(20)
-- Param1 will be set when the user selects a string value, e.g. "Last Month"

DECLARE @Date1 DATE, @Date2 DATE
-- Date1 & Date2 will be the respective lower and upper date boundaries used in the WHERE statement.

IF @Param1 = 'Last Month'
THEN
SET @Date1 = CONVERT(DATE,DATEADD(dd,-DAY(GETDATE())+1,DATEADD(mm,-1,GETDATE())))
SET @Date2 = CONVERT(DATE,DATEADD(dd,-DAY(GETDATE())+1,GETDATE()))

ELSE IF @Param1 = 'Current Month'
THEN
SET @Date1 = CONVERT(DATE,DATEADD(dd,-DAY(GETDATE())+1,GETDATE()))
SET @Date2 = CONVERT(DATE,GETDATE())

ELSE
-- Default to yesterday if nothing selected by user
SET @Date1 = CONVERT(DATE,GETDATE()-1)
SET @Date2 = CONVERT(DATE,GETDATE())

END IF

您可以使用兩個case語句來做到這一點:

select @Date1 = (case when @Param1 = 'Last Month'
                      then CONVERT(DATE,DATEADD(dd,-DAY(GETDATE())+1,DATEADD(mm,-1,GETDATE())))
                      when @Param1 = 'Current Month'
                      then CONVERT(DATE,DATEADD(dd,-DAY(GETDATE())+1,GETDATE()))
                      else CONVERT(DATE,GETDATE()-1)
                  end);

select @Date2 = (case when @Param1 = 'Last Month'
                      then CONVERT(DATE,DATEADD(dd,-DAY(GETDATE())+1,GETDATE()))
                      when @Param1 = 'Current Month'
                      then CONVERT(DATE,GETDATE())
                      else CONVERT(DATE,GETDATE())
                  end);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM