如何解决Oracle SQL-不同ID格式的子字符串匹配
29664 A120091 --HR A 120091 (CITYNAME)
90402 A12466 --HR A 12466 (CITYNAME)
我需要查询两个字段以查找不同格式的ID匹配。
左侧的第一个字段,ID以中间字符串(通常不是'A')开头的Alha字符开头,但是字母加上其右边的所有内容都是好的ID。 右边的第二个字段是第三个字母(同样可以是任何字母),删除该字母后的第一个空格,再加上所有数字直至第二个空格。 如果我这里的格式正确,则匹配的ID为粗体。这超出了我的子串印章。任何帮助表示赞赏!
解决方法
使用SUBSTR
:
SELECT *
FROM table_name t
WHERE SUBSTR( value1,6,1 ) || ' ' || SUBSTR( value1,7 )
= SUBSTR( value2,3,INSTR( value2,' ',1,2 ) - 3 );
或正则表达式:
SELECT *
FROM table_name
WHERE REGEXP_SUBSTR( value1,'[A-Z]\d+$' )
= REGEXP_REPLACE( value2,'^..([A-Z]) (\d+) .*$','\1\2' )
其中的示例数据:
CREATE TABLE table_name ( value1,value2 ) AS
SELECT '29664A120091','HRA 120091 (CITYNAME)' FROM DUAL UNION ALL
SELECT '90402A12466','HRA 12466 (CITYNAME)' FROM DUAL;
两个输出:
VALUE1 | VALUE2 :----------- | :-------------------- 29664A120091 | HRA 120091 (CITYNAME) 90402A12466 | HRA 12466 (CITYNAME)
db 提琴here
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。