【问题标题】:How to compare two columns in a table to highlight its difference using PL SQL如何使用 PL SQL 比较表中的两列以突出显示其差异
【发布时间】:2015-06-12 20:25:50
【问题描述】:

我有一个三列的表。示例数据如下。

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

对于第三行,差异为空

第四行差异为空

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

【问题讨论】:

  • 那为什么标记为Sql server???
  • 那你用的是什么? MySQL、SQL Server 还是甲骨文?你为他们每个人添加了一个标签?如果您使用的是 PL/SQL,您还应该添加存储过程的代码。
  • 我正在使用 Oracle db..

标签: oracle plsql plsqldeveloper


【解决方案1】:

这是您可以做到的一种方法,即用第二个字符串中的'' 替换第一个字符串,这会给您带来不同

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

【讨论】:

  • 感谢'replace'功能的详细解释。
【解决方案2】:

REF_NO2 是否总是 REF_NO1 的子字符串?那你就可以...

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

【讨论】:

  • 在大多数情况下,它将是一个子字符串,因此上述查询按要求突出显示了差异。
  • 一个观察 - REPLACE 将替换所有出现的字符串,因此如果 REF_NO1 是“123123M”并且 REF_NO2 是“123”,它将返回“M”。不知道你有没有这样的情况,或者这会不会是个问题……
【解决方案3】:

试试下面:

MYSQL:

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

甲骨文:

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

【讨论】:

  • 抛出的错误是'ORA-00907:缺少右括号00907。00000 -“缺少右括号” *原因:*操作:第5行错误:46'
  • 它的 Oracle 错误.. 对于 oracle 我已经更新了我的答案
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多