我將如何實現的結果如下:選擇SQL語句比較
select (1 < 2) as One, (1 > 2) as Two
,以便它會產生以下結果:
One Two
-----------------
True False
我使用的是SQL Server,但跨DBMS的例子會很好。
我將如何實現的結果如下:選擇SQL語句比較
select (1 < 2) as One, (1 > 2) as Two
,以便它會產生以下結果:
One Two
-----------------
True False
我使用的是SQL Server,但跨DBMS的例子會很好。
假設這是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
代替條件,您可以使用任何變量或任何列值。基本上是一種表達。
使用SQL Server,您甚至不需要FROM子句。 – 2011-03-17 12:02:19
@Dave - 是的,你是對的。如果表達式對錶中的列有任何引用,則使用「From」。 – 2011-03-17 12:05:35
那麼,在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表達式返回字符串。
分享和享受。
使用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語句合併到一個列中,或者將它分解爲少於或等於類型的比較。
很多人的回答都是正確的,我只是想補充一點,在像MySQL和PostgreSQL這樣的非腦損壞的引擎中,你會完全按照你的方式編寫。 Oracle和MSSQL顯然具有布爾類型,但僅在內部(作爲比較運算符的結果),但不能作爲可從「SELECT」返回的數據類型。不知道爲什麼。 – Amadan 2011-03-17 12:00:31
@Amadan嘗試這個是有原因的 - 它不在ANSI SQL規範中。甚至沒有sql-2003 http://savage.net.au/SQL/ – RichardTheKiwi 2011-03-17 12:10:40
@Richard這是什麼呢? http://savage.net.au/SQL/sql-2003-2.bnf.html#boolean%20type問題據我所知,人們不能同意在NULL擴展三元邏輯運算的結果邏輯應該是 - 但我認爲這是一個廢話的論點,因爲事實上你會在比較的結果中擁有布爾類型,並且你將在那裏有NULL,並且它確實需要以某種方式處理 - 防止這種結果被存在在我看來,直接返回正在掃地毯下。 – Amadan 2011-03-17 12:46:08