2011-03-17 118 views
8

我將如何實現的結果如下:選擇SQL語句比較

select (1 < 2) as One, (1 > 2) as Two 

,以便它會產生以下結果:

One  Two 
----------------- 
True False 

我使用的是SQL Server,但跨DBMS的例子會很好。

+0

很多人的回答都是正確的,我只是想補充一點,在像MySQL和PostgreSQL這樣的非腦損壞的引擎中,你會完全按照你的方式編寫。 Oracle和MSSQL顯然具有布爾類型,但僅在內部(作爲比較運算符的結果),但不能作爲可從「SELECT」返回的數據類型。不知道爲什麼。 – Amadan 2011-03-17 12:00:31

+0

@Amadan嘗試這個是有原因的 - 它不在ANSI SQL規範中。甚至沒有sql-2003 http://savage.net.au/SQL/ – RichardTheKiwi 2011-03-17 12:10:40

+0

@Richard這是什麼呢? http://savage.net.au/SQL/sql-2003-2.bnf.html#boolean%20type問題據我所知,人們不能同意在NULL擴展三元邏輯運算的結果邏輯應該是 - 但我認爲這是一個廢話的論點,因爲事實上你會在比較的結果中擁有布爾類型,並且你將在那裏有NULL,並且它確實需要以某種方式處理 - 防止這種結果被存在在我看來,直接返回正在掃地毯下。 – Amadan 2011-03-17 12:46:08

回答

13

假設這是SQL服務器,可以使用CASE語句。

select (case when (1 < 2) then 'True' else 'False' end) as one, 
     (case when (1 > 2) then 'True' else 'False' end) as two 
from table 

代替條件,您可以使用任何變量或任何列值。基本上是一種表達。

+1

使用SQL Server,您甚至不需要FROM子句。 – 2011-03-17 12:02:19

+0

@Dave - 是的,你是對的。如果表達式對錶中的列有任何引用,則使用「From」。 – 2011-03-17 12:05:35

0

那麼,在Oracle中,你可以做類似

SELECT CASE 
     WHEN 1 < 2 THEN 
      'TRUE' 
     ELSE 
      'FALSE' 
     END AS ONE, 
     CASE 
     WHEN 1 > 2 THEN 
      'TRUE' 
     ELSE 
      'FALSE' 
     END AS TWO 
    FROM DUAL; 

注意Oracle沒有在數據庫中布爾類型(而不是PL/SQL,這確實有布爾的),所以case表達式返回字符串。

分享和享受。

0

使用case語句:

declare @value1 int, @value2 int 
set @value1 = 1 
set @value2 = 2 

select 
case when (@value1 < @value2) then 'True' else 'False' end as One 
case when (@value1 > @value2) then 'False' else 'True' end as Two 
from table 

根據您的需求,您可以在值硬編碼,也可以做一些類似這樣的,當你可能要更改值的東西。您還可以將case語句合併到一個列中,或者將它分解爲少於或等於類型的比較。