如何比较表中的两列以使用PL SQL突出显示其差异

时间:2014-11-24 07:21:37

标签: oracle plsql plsqldeveloper

我有一个包含三列的表格。样本数据如下。

DEL_NUM     REF_NO1   REF_NO2
4785987568  5487M     5487
123468556   12365M    12365
1256785987  7859      7859
2583697412  1478569M  1478569M
1478523698  78958M    6558125

我想比较两列REF_NO1REF_NO2的值,以便我可以突出显示两列中值的差异。

示例

对于第一行,差异是M

对于第二行,差异是M

对于第三行,差异为空

对于第四行,diff为null

对于第五行,整个值不同78958M

4 个答案:

答案 0 :(得分:2)

这是你可以做到的一种方法,即用第二个字符串中的''替换第一个字符串并给你差异

mysql> select replace('5487M','5487','') as diff ; 
+------+
| diff |
+------+
| M    |
+------+
1 row in set (0.00 sec)

mysql> select replace('12365M','12365','') as diff ; 
+------+
| diff |
+------+
| M    |
+------+
1 row in set (0.00 sec)

mysql> select replace('7859','7859','') as diff ; 
+------+
| diff |
+------+
|      |
+------+
1 row in set (0.00 sec)

mysql> select replace('78958M','6558125','') as diff ; 
+--------+
| diff   |
+--------+
| 78958M |
+--------+
1 row in set (0.00 sec)

所以最终的查询可以是

select replace(REF_NO1,REF_NO2,'') as diff

答案 1 :(得分:1)

REF_NO2始终是REF_NO1的子串吗?然后你可以做......

SELECT REPLACE(REF_NO1,REF_NO2,'') as diff from mytable

答案 2 :(得分:0)

尝试以下:

MYSQL:

SELECT if(length(REPLACE(REF_NO1,REF_NO2,''))>0,REPLACE(REF_NO1,REF_NO2,''),null) as diff
FROM   table

ORACLE:

SELECT case when length(REPLACE(REF_NO1,REF_NO2,''))>0 then REPLACE(REF_NO1,REF_NO2,'') else null end as diff
FROM   table

答案 3 :(得分:0)

如果这是家庭作业,那么你已经有了一些非常好的答案。否则,我会声称这正是应该在app / UI级别进行的处理。这有几个很好的理由,特别是如果您打算像在问题中那样操纵数据的显示以强调差异发生的位置。但大多数人都记得,当你甚至可以用Java或C#等解释性语言进行处理时,差别就像跑下坡而不是穿过膝盖深的泥浆。