我有一个包含三列的表格。样本数据如下。
DEL_NUM REF_NO1 REF_NO2
4785987568 5487M 5487
123468556 12365M 12365
1256785987 7859 7859
2583697412 1478569M 1478569M
1478523698 78958M 6558125
我想比较两列REF_NO1
和REF_NO2
的值,以便我可以突出显示两列中值的差异。
示例
对于第一行,差异是M
对于第二行,差异是M
对于第三行,差异为空
对于第四行,diff为null
对于第五行,整个值不同78958M
答案 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#等解释性语言进行处理时,差别就像跑下坡而不是穿过膝盖深的泥浆。