2011-12-02 34 views
6

我想测试一些评估而不使用任何表。 例如,你可以写使用SELECT进行简单BOOLEAN评估

SELECT 1+1 
>2 

我要实现的是这样的:

SELECT 2 > 1 
>FALSE 

我知道,大多数发动机没有布尔数据类型的概念,但我不t知道他们的内部工作(即使我猜想所有的东西<> 0是true,就像在C中一样)。总之,响应的格式其实并不重要,无论是true/false0/1

+4

哦,我是多么希望有SQL实际布尔类型... –

回答

12
SELECT CASE WHEN 2 > 1 THEN 'True' ELSE 'False' END 
4
SELECT 
    CASE 
    WHEN 2 > 1 THEN 1 
    ELSE 0 
    END 
4
SELECT CASE WHEN 2 > 1 THEN cast(0 as bit) ELSE cast(1 as bit) END 
3

编辑:

SQL Server 2012的(德纳里):

SELECT IIF(2 > 1, 'TRUE', 'FALSE') 
+0

我想这个解决方案有很多,但它似乎没有我的SQL服务器上运行2008 – Raffaele

+0

是我的错,它从2012年的: - /,我昨天一直在读它([Denali - 逻辑函数-IIF() - 快速介绍](http://blog.sqlauthority.com/2011/09/10/sql-server-denali-逻辑函数 - iif-a-quick-introduction /)),我忘记了版本。 –

1

在Mysql和Oracle和显然SQL Server中,你可以se nullif(对SQL-Server忽略from dual)因此,假设您将null作为true,那么您可以使用这种方式处理相等性测试,而不会出现凌乱的case语句或不得不处理字符串。

SQL> select nullif(1,0) from dual; 

NULLIF(1,0) 
----------- 
      1 

SQL> select nullif(1,1) from dual; 

NULLIF(1,1) 
----------- 

SQL> 
+0

我不知道这个构造。好点子 – Raffaele