oracle 如何使用给定的输入参数提取字母数字字符串中的数值

fquxozlt  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(116)

我一直在尝试根据用户输入的数字值为具有字母数字字符串的列添加过滤条件,返回结果需要大约25分钟的时间。
我也在pl/sql developer中尝试了reg_exp()和SUBSTR()方法。
用户将使用6388997这样的值进行搜索,它应该返回EMPLOYEE_ID:638997

SELECT EMP_NUM FROM ABC.HR_ORG_EMPLOYEE_DATA
WHERE SUBSTR(EMP_NUM ,12,14)= TO_CHAR('%' || '&EMP' || '%') 

SELECT EMP_NUM FROM ABC.HR_ORG_EMPLOYEE_DATA
WHERE regexp_replace(EMP_NUM , '[^0-9]', '') = '%' || '&EMP' || '%'

这是HR_ORG_EMPLOYEE_DATA表的简单快照
| EMP_NUM|
| --|
| 员工ID:448696|
| 电话:+86-510 - 8888888|
| 地址_编号:778980|
我们是否有任何有效的方法来解决这些类型的查询?

xzabzqsa

xzabzqsa1#

Oracle的正则表达式函数往往是CPU密集型的,而不是替代品。
不使用正则表达式的替代方法如下

create table t (
  col varchar2(50)
); 

 insert into t values ('EMPLOYEE_ID: 448696'); 

 insert into t values ('EMPLOYEE_ID: 448'); 

SELECT SUBSTR(col, INSTR(col, ':') + 2) AS emp_num FROM t

EMP_NUM
448696
448
2guxujil

2guxujil2#

如果你的数据总是具有相同的格式EMPLOYEE_ID: XXXXXX,并且你想使用替换变量,那么你不需要“匹配”或使用子字符串,可以用途:

SELECT EMP_NUM
FROM   ABC.HR_ORG_EMPLOYEE_DATA
WHERE  EMP_NUM = 'EMPLOYEE_ID: &EMP';

如果它是一个较长的字符串的一部分,则使用LIKE

SELECT EMP_NUM
FROM   ABC.HR_ORG_EMPLOYEE_DATA
WHERE  EMP_NUM LIKE '%EMPLOYEE_ID: &EMP%';

如果你想匹配字符串中任何地方的数字,那么:

SELECT EMP_NUM
FROM   ABC.HR_ORG_EMPLOYEE_DATA
WHERE  EMP_NUM LIKE '%&EMP%';

相关问题