【问题标题】:Using SELECT for simple BOOLEAN evaluation使用 SELECT 进行简单的 BOOLEAN 评估
【发布时间】:2011-12-02 14:45:52
【问题描述】:

我想在不处理任何表格的情况下测试一些评估。 例如,你可以写

SELECT 1+1
>2

我想实现这样的目标:

SELECT 2 > 1
>FALSE

我知道大多数引擎没有布尔数据类型的概念,但我不知道它们的内部是如何工作的(即使我猜所有 0 都是true,就像在 C 中一样)。反正回复的格式真的无所谓,是true/false还是0/1

【问题讨论】:

  • 哦,我多么希望 SQL 有一个实际的布尔类型...

标签: mysql sql sql-server


【解决方案1】:
SELECT CASE WHEN 2 > 1 THEN 'True' ELSE 'False' END

【讨论】:

    【解决方案2】:
    SELECT
      CASE
        WHEN 2 > 1 THEN 1
        ELSE 0
      END
    

    【讨论】:

      【解决方案3】:
      SELECT CASE WHEN 2 > 1 THEN cast(0 as bit) ELSE cast(1 as bit) END
      

      【讨论】:

        【解决方案4】:

        编辑:

        SQL Server 2012(德纳利):

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

        【讨论】:

        【解决方案5】:

        在 Mysql 和 Oracle 以及显然是 SQL-Server 中,您可以使用 nullif(忽略 SQL-Server 的 from dual)因此,假设您将 null 视为 true,那么您可以通过这种方式处理相等测试,而不会出现混乱的情况声明或必须处理字符串。

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

        【讨论】:

          【解决方案6】:

          只需使用:

          SELECT expr1 condition expr2
          

          例如。

          SELECT 1 < 2 # returns 1
          

          如果条件为真则返回 1,否则返回 0。

          测试成功:

          • MariaDB 10.1
          • MySQL 5.7(Percona XtraDB 集群)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-05-28
            • 1970-01-01
            • 2015-08-27
            • 2014-05-19
            • 2017-05-13
            • 1970-01-01
            • 1970-01-01
            • 2013-05-17
            相关资源
            最近更新 更多