如果第五位是字母而不是数字,则使用ORACLE

时间:2018-11-27 17:01:43

标签: oracle

如何使用Oracle查找第五个位置是否是字母而不是数字?

我最后的尝试是使用以下语句:

REGEXP_LIKE (table_column, '([abcdefghijklmnopqrstuvxyz])');

4 个答案:

答案 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')