我一直在尝试根据用户输入的数字值为具有字母数字字符串的列添加过滤条件,返回结果需要大约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|
我们是否有任何有效的方法来解决这些类型的查询?
2条答案
按热度按时间xzabzqsa1#
Oracle的正则表达式函数往往是CPU密集型的,而不是替代品。
不使用正则表达式的替代方法如下
2guxujil2#
如果你的数据总是具有相同的格式
EMPLOYEE_ID: XXXXXX
,并且你想使用替换变量,那么你不需要“匹配”或使用子字符串,可以用途:如果它是一个较长的字符串的一部分,则使用
LIKE
:如果你想匹配字符串中任何地方的数字,那么: