我试图找到与某个指纹匹配的所有内容,但 Oracle 的通配符并不是非常精确。
该指纹将是: WHERE symbol LIKE '%_####@' ESCAPE '\'
前面的内容无关紧要(% 通配符)
接下来是一个下划线(用 '\' 转义)
然后是四个数字 (#)
,最后是一个字符 AZ (@)
我使用翻译功能找到了一些东西,但我无法让它工作。现在我正在研究正则表达式,但我以前从未使用过它们。我试图了解它们是什么以及它们将如何解决我的问题。
听起来您想使用正则表达式,而不是 LIKE。您的“指纹”似乎被正则表达式捕获,[_][[:digit:]]{4}[A-Z]
因此您可以使用它regexp_instr
来确定指纹是否存在(以及它在字符串中的位置)。在这种情况下,字符串 '_1234B' 是第一个字符串中的指纹,从位置 7 开始
SQL> ed
Wrote file afiedt.buf
1 with x as (
2 select 'sb1234_1234Bdelta' str from dual union all
3 select 'no match' from dual
4 )
5 select str,
6 regexp_instr( str, '[_][[:digit:]]{4}[A-Z]' )
7 from x
8* where regexp_instr( str, '[_][[:digit:]]{4}[A-Z]' ) > 0
SQL> /
STR REGEXP_INSTR(STR,'[_][[:DIGIT:]]{4}[A-Z]')
----------------- ------------------------------------------
sb1234_1234Bdelta 7