0

我试图找到与某个指纹匹配的所有内容,但 Oracle 的通配符并不是非常精确。

该指纹将是: WHERE symbol LIKE '%_####@' ESCAPE '\'

前面的内容无关紧要(% 通配符)
接下来是一个下划线(用 '\' 转义)
然后是四个数字 (#)
,最后是一个字符 AZ (@)

我使用翻译功能找到了一些东西,但我无法让它工作。现在我正在研究正则表达式,但我以前从未使用过它们。我试图了解它们是什么以及它们将如何解决我的问题。

4

1 回答 1

2

听起来您想使用正则表达式,而不是 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
于 2012-05-04T16:02:47.233 回答