【问题标题】:PostgreSQL boolean comparisonPostgreSQL 布尔比较
【发布时间】:2020-11-05 14:03:28
【问题描述】:

下面的对比有没有区别

#1

where x = true

#2

where x is true

#3

where x = '1'

#4

where x

【问题讨论】:

    标签: sql postgresql boolean


    【解决方案1】:
    1. 这完全一样

      WHERE x
      

      TRUEFALSENULL 恰好是 x

    2. 这与第一种情况相同,除了x 为 NULL,在这种情况下它将为FALSE。所以它是一样的

      WHERE coalesce(x, FALSE)
      
    3. 这恰好与第一种情况相同,因为'1' 被解释为TRUE。见the documentation

      boolean 类型的数据类型输入函数接受这些字符串表示以表示“真实”状态:

      true
      yes
      on
      1

    我首选的方法是最简单的:

    WHERE x
    

    【讨论】:

    • "...除非 x 为 NULL,在这种情况下它将为 FALSE" -- 这不应该导致 UNKNOWN 而不是 FALSE?
    • @TheImpaler:在 WHERE 子句中,“unknown”与“false”基本相同
    • 我不确定SELECT 中的WHERE 子句与CREATE INDEX 中的行为方式相同...一个过滤器何时为真,而另一个过滤器何时不同于“假” “……不确定了。
    • 如果x 为NULL,@TheImpaler x IS TRUE 将返回FALSE。我的编号对应问题中的编号。
    【解决方案2】:

    使用isis not 将处理值为空的情况。如果依赖=,比较的结果也会是null

    select null is true as "is", null = true as "equal";
     is | equal
    ----+-------
     f  |
    (1 row)
    

    【讨论】:

    • 稍微扩展一下:对于非空值,x is truex = true 会做同样的事情。
    猜你喜欢
    • 1970-01-01
    • 2019-05-28
    • 2012-08-19
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多