【问题标题】:How to select the comparison of two columns as one column in Oracleoracle中如何选择两列比较为一列
【发布时间】:2011-06-17 04:45:38
【问题描述】:

我不知道如何在我的 SELECT 查询中添加一列来指示两列是否包含 Oracle 中的相同数据。

我想写一个这样的查询:

select column1, column2, column1=column2 from table

如果我有这张桌子:

+---------+---------+
| column1 | column2 |
+---------+---------+
| value1  | value1  |
| value2  | value3  |
| value4  | value4  |
+---------+---------+

得到如下结果:

+---------+---------+-----------------+
| column1 | column2 | column1=column2 |
+---------+---------+-----------------+
| value1  | value1  | true            |
| value2  | value3  | false           |
| value4  | value4  | true            |
+---------+---------+-----------------+

执行此操作的正确语法是什么?

【问题讨论】:

  • 无论出于何种原因,Oracle SQL 不像 MySQL 那样具有布尔数据类型。我真的很想知道为什么。
  • whell, true|false, 0|1, 不管是什么意思:)

标签: sql oracle select


【解决方案1】:

几年前我停止使用DECODE,因为它不便携。此外,它不如CASE/WHEN 灵活可读性差。

然而,你可以对 decode 做一个巧妙的“技巧”,因为它是如何处理 NULL 的。在解码中,NULL 等于 NULL。可以利用它来判断两列是否不同,如下所示。

select a, b, decode(a, b, 'true', 'false') as same
  from t;

     A       B  SAME
------  ------  -----
     1       1  true
     1       0  false
     1          false
  null    null  true  

【讨论】:

    【解决方案2】:

    如果您也想考虑空值相等,请尝试以下操作

    select column1, column2, 
       case
          when column1 is NULL and column2 is NULL then 'true'  
          when column1=column2 then 'true' 
          else 'false' 
       end 
    from table;
    

    【讨论】:

      【解决方案3】:
      select column1, coulumn2, case when colum1=column2 then 'true' else 'false' end from table;
      

      HTH

      【讨论】:

      • 短小精悍!
      猜你喜欢
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 2021-11-06
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多