模式匹配与喜欢的条款

2 sql oracle plsql oracle9i

我试图在SQL语句中使用LIKE子句来匹配Oracle中的某个模式.

我想这样做:

LIKE '[A-Z][A-Z][1-4]%'
Run Code Online (Sandbox Code Playgroud)

..但我不能使用正则表达式,因为这是在Oracle9i上(正则表达式支持10g).

我试图匹配之前有两个字符的东西,然后是1到4之间的数字以及除此之外的任何东西.我试过这个,但它似乎没有用.我能够让它工作的唯一方法是:

WHERE ...
LIKE '%1__' OR 
LIKE '%2__' OR 
LIKE '%3__' OR 
LIKE '%4__'
Run Code Online (Sandbox Code Playgroud)

我不确定我想做的方式是否可行,或者是否正确,因为我从未尝试使用LIKE子句的模式.

您将给予的任何帮助将不胜感激.

DCo*_*kie 5

笨重,但也许:

select *
  from <your_table>
 where TRANSLATE(SUBSTR(<blah>,1,3),'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234',
                                    'AAAAAAAAAAAAAAAAAAAAAAAAAA1111') = 'AA1';
Run Code Online (Sandbox Code Playgroud)

可能适合您的需求......

编辑:@Lobo的xlnt建议翻译子字符串,而不是取翻译字符串的子字符串...

  • +1.虽然如果<blah>很长,你会更好地做翻译(substr(<blah>,1,3),'ABC ......','AAA ...')?我假设翻译在较短的字符串上更便宜,并且获得子字符串的时间在两种情况下都是相同的. (3认同)