首页 > 解决方案 > Oracle SQL - 不同 ID 格式的 substr 匹配

问题描述

29664 A120091 ------ HR A 120091(城市名称)

90402 A12466 ------ HR A 12466 (CITYNAME)

我需要查询两个字段以查找不同格式的 ID 匹配项。

左侧的第一个字段,ID 以字符串中间的 alha 字符开头,并不总是“A”,但 alpha 加上其右侧的所有内容都是正确的 ID。右边的第二个字段,它是第三个 alpha(同样可以是任何字母),删除该 alpha 之后的第一个空格,加上直到第二个空格的所有数字。如果我在这里的格式正确,则匹配的 ID 以粗体显示。它只是超出了我的子弦印章。任何帮助表示赞赏!

标签: sqloraclepattern-matchingsubstring

解决方案


使用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;

两个输出:

价值1 | 价值2               
:----------- | :--------------------
29664A120091 | HRA 120091(城市名称)
90402A12466 | HRA 12466(城市名称)

db<>在这里摆弄


推荐阅读