sql - 我们如何将两行的选定字段与字符进行比较
问题描述
我试图只比较来自不同来源的每一行中数据的特定部分。以下是我拥有的数据,
seq_id ID SOURCE Cell name TABLE NAME
1 CT01 SRC1 0097023AE5-557-0182726742-BDCOR-__A [121913] A Table info 20190116 CC
2 CT01 SRC1 0002019609-560-0171464877-MORTR-AAA [121915] AAA Table info 20190116 CC
3 CT01 SRC1 0002018668-560-0171465297-MORTR-AAA [121915] AAA Table info 20190116 CC
4 CT01 SRC1 0003117609-327-0193160029-MORTR-AAA [121915] AAA Table info 20190116 CC
5 CT01 SRC1 0437076AV4-487-0182727650-BDCOR-__A [121913] A Table info 20190116 CC
6 CT01 SRC1 0003114003-400-0179915917-MORTR-AAA [121915] AAA Table info 20190116 CC
7 CT01 SRC1 0008002332-045-0000000001-MORTC-__A [121913] A Table info 20190116 CC
8 CT01 SRC1 091324PBM3-334-0182766417-BDCOR-__A [121913] A Table info 20190116 CC
9 CT01 SRC1 0785592AV8-705-0182772318-BDCOR-BBB [121918] BBB Table info 20190116 CC
10 CT01 SRC2 0097023AE5-557-0182726742-BDCOR-__A [121703] A-FIELD-COMP-20190116
11 CT01 SRC2 0002019609-560-0171464877-MORTR-AAA [121705] AAA-FIELD-COMP-20190116
12 CT01 SRC2 0002018668-560-0171465297-MORTR-AAA [121705] AAA-FIELD-COMP-20190116
13 CT01 SRC2 0003117609-327-0193160029-MORTR-AAA [121705] AAA-FIELD-COMP-20190116
14 CT01 SRC2 0437076AV4-487-0182727650-BDCOR-__A [121703] A-FIELD-COMP-20190116
15 CT01 SRC2 0003114003-400-0179915917-MORTR-AAA [121705] AAA-FIELD-COMP-20190116
16 CT01 SRC2 0008002332-045-0000000001-MORTC-__A [121703] A-FIELD-COMP-20190116
17 CT01 SRC2 091324PBM3-334-0182766417-BDCOR-__A [121703] A-FIELD-COMP-20190116
18 CT01 SRC2 0785592AV8-705-0182772318-BDCOR-BBB [121708] BBB-FIELD-COMP-20190116
在 cellname 列中,我只需要考虑最后 3 个字符(例如,“__A”、“BBB”)并检查 SRC1 和 SRC2 的 tablename 列中的数字之后的第一个字符是否匹配并显示结果。
例如 - 需要比较 seq_id 1 和 10,因为 src1 和 src2 的单元名称相同。
seq_id ID SOURCE Cell name TABLE NAME
1 CT01 SRC1 0097023AE5-557-0182726742-BDCOR-__A [121913] A Table info 20190116 CC
10 CT01 SRC2 0097023AE5-557-0182726742-BDCOR-__A [121703] A-FIELD-COMP-20190116
这里 cellname 列中的最后一个字符是“__A”,即“A”。如果它与两行的表名列的开头字符(忽略[]内的数字)匹配,则结果为通过。在这种情况下,我们将“A”作为第一个字符,因此结果将是“通过”
seq_id ID SOURCE Cell name result
1 CT01 SRC1 0097023AE5-557-0182726742-BDCOR-__A PASS
这是我想要得到的东西,因为它看起来对我来说太复杂了,我完全被卡住了。请帮忙。
解决方案
如果我理解正确,您希望将单元格名称的最后 3 个字符与删除的下划线与第一个空格后面的表名称的第一部分进行比较。
要使最后三个字符减去任何下划线,您可以使用此函数trim(substr("Cell name",-3),'_')
,您可以在正则表达式中针对表名称使用该函数来检查匹配项。
select seq_id
, ID
, SOURCE
, Cell_name
, case when regexp_like( table_name
, '^[^\w]* ' ||
ltrim(substr(cell_name,-3),'_') ||
'[- ]')
then 'PASS'
else 'FAIL'
end result
from YourData
与确保 SRC1 和 SRC2 匹配的其他一些响应一样,您可以进行自联接并在 case 语句中添加第二个条件:
select src1.seq_id
, src1.ID
, src1.SOURCE
, src1.Cell_name
, case when regexp_like(src1.table_name,'^[^\w]* '
||ltrim(substr(src1.cell_name,-3),'_')
||'[- ]')
and regexp_like(src2.table_name,'^[^\w]* '
||ltrim(substr(src2.cell_name,-3),'_')
||'[- ]')
then 'PASS'
else 'FAIL'
end result
from YourData src1
join YourData src2
on src1.cell_name = src2.cell_name
and src1.source = 'SRC1'
and src2.source = 'SRC2'
推荐阅读
- javascript - JS异步等待Node中的“无”?
- build - 如何在 Rust 中获取源代码的哈希值
- powershell - 使用变量作为目标文件夹名称的复制项问题
- python - Setup.py - 在 setuptools 中的包内添加数据文件
- python - 致命的 Python 错误:UBUNTU 18.04 LTS 服务器中的分段错误?
- python - 是否可以让模块在不同的模块中运行?
- node.js - 从 node_modules 绑定动态 Vue 图片 src
- javascript - 导航栏下拉和折叠不起作用[wordpress + bootstrap]
- python - Python UDP套接字,未知延迟
- javascript - 使用 intersectionObserver 和 fullpage.js 更改滚动标题样式