2014-09-10 32 views
0

我需要檢查一個輸入字符串的「前6個字符的串」用於純串的純字符串。檢查使用REGEXP_LIKE

declare 
p_str varchar2(30) := 'ABCD1240'; 
l_result varchar2(20); 

begin 
if REGEXP_LIKE(substr(p_str,1,6), '[[:alpha:]]') then 
     dbms_output.put_line('It is a pure string'); 
else 
     dbms_output.put_line('It is an alphanumeric'); 
end if; 
end; 
/

我可以看到,該字符串是ABCD1290字母數字,因爲它包含12 但前6個字符,即打印的輸出,否則說。

我做得不對的REGEXP_LIKE「阿爾法」? 我以爲alpha應該是純字符而不是數字。 在這裏,ABCD1290應該給我:作爲輸出的字母數字。 ABCDXY90應該是:純字符串

+0

嘗試'^ [:阿爾法:]] {6}' – sln 2014-09-10 15:32:04

+0

我不知道在Oracle正則表達式,但我猜你忘了基數:'^ [[:alpha:]] + $'。 – sp00m 2014-09-10 15:32:13

+0

你不想'substr'從字符0開始? – sln 2014-09-10 15:34:09

回答

0

試試這個:

declare 
    l_res varchar2(100); 
begin 
    for i in (select 'abcdef123' val from dual union 
      select '123abc123' from dual union 
      select '123456abc' from dual) 
    loop 
    if REGEXP_LIKE(i.val, '^\D{6}') 
    then 
     l_res := 'alpha'; 
    else 
     l_res := 'numeric'; 
    end if; 
    dbms_output.put_line(i.val || ' is ' || l_res); 
    end loop; 
end; 

123456abc is numeric 
123abc123 is numeric 
abcdef123 is alpha 
+0

謝謝。 \ D代表什麼? – Casey 2014-09-10 16:49:41

+0

非數字,{6}表示我需要正好6個非數字。 ^意味着我需要在一個字符串的開始正好6個非數字 – zaratustra 2014-09-10 16:51:55

+0

它很糟糕。但事實證明,我們不能使用regexp_like來檢查字符串,因爲我們的應用程序工具不支持它。有沒有辦法做到這一點,只使用基本的內置oracle函數,如substr和instr? – Casey 2014-09-10 20:14:27