oracle中如何选择两列比较为一列

Posted

技术标签:

【中文标题】oracle中如何选择两列比较为一列【英文标题】:How to select the comparison of two columns as one column in Oracle 【发布时间】: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, 不管是什么意思:) 【参考方案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

【讨论】:

短小精悍!

以上是关于oracle中如何选择两列比较为一列的主要内容,如果未能解决你的问题,请参考以下文章

我正在使用 case 语句提取两列并将它们选择为一列

UICollectionView 默认为一列,我如何获得两列?

sql查询中,如何将某列 分成 两列。

Oracle SQL两列合并为一列,并且可以自定义添加一些字符

怎么把两列合并到一列

如何像蜂巢中的地图一样将两列合并为一列?