簡體   English   中英

在sql case語句中使用比較符號

[英]Use comparison signs inside a sql case statement

我正在尋找一種使用小於和大於符號在sql select查詢中構建case語句的方法。 例如,我想根據變量選擇排名:

DECLARE @a INT
SET @a = 0

SELECT CASE 
         WHEN @a < 3 THEN 0
         WHEN @a = 3 THEN 1
         WHEN @a > 3 THEN 2
       END

我想把它寫成:

DECLARE @a INT
SET @a = 0

SELECT CASE @a
         WHEN < 3 THEN 0
         WHEN 3 THEN 1
         WHEN > 3 THEN 2
       END

...但SQL不允許我以這種方式使用<和>符號。 有沒有辦法可以做到這一點是SQL 2005,還是我需要像第一個那樣使用代碼。

只需要一次代碼的原因是因為它會使代碼更易讀/可維護,而且因為我不確定SQL服務器是否必須為每個CASE語句運行計算。

我正在尋找一個VB.NET案例聲明equivelent:

Select Case i
    Case Is < 100
        p = 1
    Case Is >= 100
        p = 2
End Select

也許這在SQL中是不可能的,沒關系,我只想確認一下。

您可以使用SIGN功能

DECLARE @a INT
SET @a = 0

SELECT CASE SIGN(@a - 3)
         WHEN -1 THEN 0
         WHEN 0 THEN 1
         WHEN 1 THEN 2
       END

如果@a小於3,則@a - 3導致負int,其中SIGN返回-1。

如果@a為3或更大,則SIGN分別返回0或1。


如果您想要的輸出是0,1和2,那么您可以進一步簡化:

DECLARE @a INT
SET @a = 0

SELECT SIGN(@a - 3) + 1

使用@Jose Rui Santos建議的 SIGN似乎是一個很好的解決方法。 另一種方法是為表達式分配別名,使用子選擇並在外部選擇中測試表達式(使用其別名):

SELECT
  …,
  CASE
    WHEN expr < 3 THEN …
    WHEN expr > 3 THEN …
  END AS …
FROM (
  SELECT
    …,
     AS expr
  FROM …
  …
)
SELECT 
CASE 
WHEN ColumnName >=1 and ColumnName <=1 THEN 'Fail'
WHEN ColumnName >=6 THEN 'Pass'
ELSE 'Test'
END
FROM TableName

暫無
暫無

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

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