将数字与Oracle中的字符串进行比较

时间:2018-04-24 12:03:49

标签: sql oracle

我有一个查询,它返回以下示例数据: -

SELECT * FROM VW_STATUSNEW

ID STATUS_1 STATUS_2
1  FAIL     1
2  FAIL     NULL
3  1        NULL
4  NULL     2
5  2        2
6  2        FAIL
7  NULL     NULL

Oracle是否可以返回STATUS_1和STATUS_2不匹配的所有行。因此,使用上面的数据,所需的结果是: -

ID STATUS_1 STATUS_2
1  FAIL     1
2  FAIL     NULL
3  1        NULL
4  NULL     2
6  2        FAIL

问题似乎是将单词FAIL与一个数字进行比较,并为NULLs做准备。

5 个答案:

答案 0 :(得分:2)

这两种状态具有相同的类型(两列中都有字符串)。所以比较不应该是一个问题。这是一种方式:

SELECT *
FROM VW_STATUSNEW
WHERE (status1 <> status2) OR
      (not (status1 is null and status2 is null)) ;

答案 1 :(得分:1)

SELECT *
FROM VW_STATUSNEW
WHERE STATUS_1 <> STATUS_2
OR (STATUS_1 IS NULL AND STATUS_2 IS NOT NULL)
OR (STATUS_1 IS NOT NULL AND STATUS_2 IS NULL);

SELECT *
FROM VW_STATUSNEW
WHERE STATUS_1 <> STATUS_2
OR NOT (STATUS_1 IS NULL AND STATUS_2 IS NULL)

<强>输出

ID  STATUS_1    STATUS_2
1   FAIL        1
2   FAIL        (null)
3   1           (null)
4   (null)      2
6   2           FAIL

<强>演示

  

http://sqlfiddle.com/#!4/3694b/5

答案 2 :(得分:1)

这是DECODE仍然有用的少数情况之一,因为根据解码,NULL等于null。

select * 
  from VW_STATUSNEW
 where decode(status_1, status_2, 1, 0) = 0;

答案 3 :(得分:0)

试试这个:

SELECT 
  ID 
  ,STATUS_1 
  ,STATUS_2 
FROM VW_STATUSNEW 
where NVL(STATUS_1, '0') != NVL(STATUS_2, '0')

答案 4 :(得分:0)

Pentaho Reporting Output Example.ktr

返回

with testtab as (select 'Fail' "STAT1", '1' "STAT2" from dual
union all select 'Fail', null from dual
union all select '1', null from dual
union all select null, '2' from dual
union all select '2', '2' from dual
union all select '2', 'FAIL' from dual
union all select null, null from dual)
select * from testtab
where nvl(STAT1,-1) != nvl(STAT2,-1);

您的示例中的Stat1 = status_1。

如果Stat1 Stat2 Fail 1 Fail null 1 null null 2 2 FAIL 为空,

nvl(value, altValue)会返回altValue