如何检查Oracle中字符串中的特定位置

时间:2016-06-21 15:50:17

标签: mysql oracle oracle11g

如何检查字符串中的第九个字符是字母还是数字。

例如,在" 25006070TR"我想要返回Yes或类似于它的信件。另一方面,在" 250060708R"我想要一个" No"或者说数字的东西。

1 个答案:

答案 0 :(得分:1)

您可以使用case语句以及substr和regexp_like的组合,例如:

with sample_data as (select '25006070TR' str from dual union all
                     select '250060708R' str from dual union all
                     select '25006070#R' str from dual union all
                     select '25006070 R' str from dual union all
                     select '12345' str from dual)
select str,
       case when regexp_like(substr(str, 9, 1), '\d') then 'Digit'
            when regexp_like(substr(str, 9, 1), '[[:alpha:]]') then 'Letter'
            when substr(str, 9, 1) is null then 'Empty'
            else 'Special character'
       end ninth_char_type
from   sample_data;


STR        NINTH_CHAR_TYPE  
---------- -----------------
25006070TR Letter           
250060708R Digit            
25006070#R Special character
25006070 R Special character
12345      Empty            

显然,如果你直接在PL / SQL中这样做,你可以直接将case语句嵌入到PL / SQL中;你不需要切换到SQL。

如果从表中获取字符串,则应将case表达式保存在SQL语句中。