SQL> with tt as
2 (
3 select 'haha' string from dual union
4 select '123' from dual union
5 select 'haha12' from dual union
6 select 'haha[]' from dual union
7 select '12@@' from dual union
8 select 'ah@!123' from dual
9 )
10 select string
11 from
12 (
13 select string,translate(
14 string,'abcdefghijklmnopqrstuvwxyz0987654321',
15 rpad('#',26,'#')||rpad('*',10,'*')
16 )
17 translated from tt
18 )
19 where instr(translated,'#') > 0
20 and instr(translated,'*') > 0;
STRING
-------
ah@!123
haha12
其实就是通过translate函数把所有字母和数字变换成两种统一的字符,上例中是把字母变为#,数字变为*,接着再外层select的where子句中对转换后的字符串进行判断,如果两者都大于0,也就说既有字母也有数字,那么就没问题了。