2015-04-23 218 views
0

我想在下面的txt中打印字數,忽略特殊字符,如=,;:'。這個函數已經可以工作了,但是我在這裏找到的所有例子都不能正常工作,這就是我所嘗試過的。用正則表達式刪除空格,逗號,冒號,分號

的TXT是:

select name from v$database; select serial# from db4sql; clear 

Select (length (txt) - length(regexp_replace(txt, '[0-9\. ,]+$','')) 

回答

1

我想打印的單詞數在以下TXT忽略特殊字符,例如=;:」。

任何你會做起來很複雜忽略標點符號時,所有你需要的是算的話的數量。這是一個簡單的查詢使用REGEXP_COUNT[[:blank:]]字符類。

SQL> WITH DATA AS(
    2 SELECT q'[select name from v$database; select serial# from db4sql; clear]' txt 
    3 FROM dual 
    4 ) 
    5 SELECT REGEXP_COUNT(txt, '[^[:blank:]]+') cnt 
    6 FROM DATA 
    7/

     CNT 
---------- 
     9 

SQL> 

刪除空格,昏迷,冒號,分號用正則表達式

確定。如果您只想替換標點並僅返回純文本字母,則使用[[:punct:]]字符類。

SQL> WITH DATA AS(
    2 SELECT q'[select name from v$database; select serial# from db4sql; clear]' txt 
    3 FROM dual 
    4 ) 
    5 SELECT REGEXP_replace(txt, '[[:punct:]]') cnt 
    6 FROM DATA 
    7/

CNT 
---------------------------------------------------------- 
select name from vdatabase select serial from db4sql clear 

SQL> 
1

select語句將永遠給你的長度不是單詞數字符串中,我已經修改了查詢。請查看是否適合您的需要,

SQL> declare 
    2 txt varchar2(1000):='select name from v$database; select serial# from db4sql; clear '; 
    3 newval varchar2(100); 
    4 begin 
    5 select REGEXP_COUNT(txt, '[^ ]+')into newval from dual; 
    6 dbms_output.put_line('the total number of words are '||newval); 
    7 end; 
    8 
    9 /
the total number of words are 9 

PL/SQL procedure successfully completed. 
+0

爲什麼在普通SQL中可以完成相同的PL/SQL? –

相關問題