如何使用Oracle查找第五个位置是否是字母而不是数字?
我最后的尝试是使用以下语句:
REGEXP_LIKE (table_column, '([abcdefghijklmnopqrstuvxyz])');
答案 0 :(得分:1)
尝试:
REGEXP_LIKE (table_column, '^....[a-z]')
或者:
SUBSTR (table_column, 5, 1 ) BETWEEN 'a' AND 'z'
答案 1 :(得分:1)
也许您宁愿检查第5位是否包含数字(这意味着它不是别的东西),即与您正在做的相反。
为什么?因为“字母”不仅仅是ASCII,看看我的示例中的第四行-它包含克罗地亚语字符,并且这些字符不在[a-z](也不是[A-Z])之间。
SQL> with test (col) as
2 (select 'abc_3def' from dual union all
3 select 'A435D887' from dual union all
4 select '!#$%&/()' from dual union all
5 select 'ASDĐŠŽĆČ' from dual
6 )
7 select col,
8 case when regexp_like(substr(col, 5, 1), '\d+') then 'number'
9 else 'not a number'
10 end result
11 from test;
COL RESULT
------------- ------------
abc_3def number
A435D887 not a number
!#$%&/() not a number
ASDĐŠŽĆČ not a number
SQL>
答案 2 :(得分:1)
锚定在字符串的开头,否则可能会得到意外的结果。这有效,但是删除插入符号(字符串锚的开始),并返回“ TRUE”!请注意,它使用不区分大小写的'i'标志。
select 'TRUE'
from dual
where regexp_like('abcd4fg', '^.{4}[A-Z]', 'i');
答案 3 :(得分:1)
还有另一种方法:
regexp_like(table_column, '^....[[:alpha:]]')
使用字符类[[:alpha:]]将选择所有字母的大写,小写,重音等,但是将忽略数字,标点符号和空格字符。
如果您关心的是字符不是数字,请使用
not regexp_like(table_column, '^....[[:digit:]]')
或
not regexp_like(table_column, '^....\d')