日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle区分中文和英文,oracle中中英文段落划分实现

發布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle区分中文和英文,oracle中中英文段落划分实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

oracle中關于中文占用字節數,不同的數據庫有不同的情況,有的占用兩個字節、有的占用三個字節,現在測試環境的數據庫中文占用三個字節,要實現由中英文組成的段落字符串,按照每行占用多少字節重新分段,具體應用是在潤乾報表展現。

由于中文字符占用三個字節一個字符,英文字符及數字占用一個字節一個字符,通過字符去判定一行多少字,最后會出現全部漢字的一行跟全部數字的一行無法對其的情況,所以最終考慮用字節去判定一行占用字節數,最后段落劃分以及對齊都能滿足需求。

具體實例實現:

一、數據庫中字段存儲的原始值

二、通過函數調用實現需求

select? FUN_STR_SPLIT(k.COMMENTS)? as text_COMMENTS_first? from table_name k;

CREATE OR REPLACE FUNCTION FUN_STR_SPLIT(pStr IN VARCHAR2)

RETURN VARCHAR2 AS

V_LENGTH NUMBER;--字符長度

V_STR VARCHAR2(4000);

V_STR_T VARCHAR2(4000);

V_STR_RET VARCHAR2(4000);

V_TEMP VARCHAR2(4000);

V_TEMP_CHAR VARCHAR2(20);

V_TEMP_CHAR_T VARCHAR2(20);

V_TEMP_CHAR_W VARCHAR2(20);

V_COUNT NUMBER;--回車
數量

V_COUNT_CH NUMBER;--中文占用字節數

V_COUNT_NUM NUMBER;--是否是漢字判斷

V_COUNT_CH_NUM NUMBER;--中文標點

I NUMBER;

J NUMBER;

BEGIN

I :=1;

J :=1;

V_COUNT :=0;

--將字符串中回車 換成

--SELECT REPLACE(REPLACE(PSTR,CHR(10),'
'),' ','') INTO V_TEMP FROM DUAL;

SELECT REPLACE(PSTR,CHR(10),'
') INTO V_TEMP FROM DUAL;

--計算字符長度

SELECT LENGTH(V_TEMP) INTO V_LENGTH FROM DUAL;

--計算中文占用字節數

SELECT LENGTHB('啊') INTO V_COUNT_CH FROM DUAL;

--循環判斷字符

WHILE I < V_LENGTH+1 LOOP

--獲取對應位置字符

V_TEMP_CHAR:=SUBSTR(V_TEMP,I,1);

--判斷是否是中文

select instr('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*();:/?,<>',upper(V_TEMP_CHAR)) into V_COUNT_CH from dual;

if j < 72 then

--如果是中文 (中文占用三個字節)

if V_COUNT_CH > 0 then

--判斷當前字符的下一個是不是

V_TEMP_CHAR_T:=SUBSTR(V_TEMP,I+1,1);

if V_TEMP_CHAR_T = '

V_TEMP_CHAR:=SUBSTR(V_TEMP,I,5);

V_STR :=V_STR||V_TEMP_CHAR;

J :=1;

I :=I+5;

V_COUNT :=V_COUNT+1;

else

V_STR :=V_STR||V_TEMP_CHAR;

i :=i+1;

j :=j+1;

end if;

else

--判斷當前字符的下一個是不是

V_TEMP_CHAR_T:=SUBSTR(V_TEMP,I+1,1);

if V_TEMP_CHAR_T = '

V_TEMP_CHAR:=SUBSTR(V_TEMP,I,5);

V_STR :=V_STR||V_TEMP_CHAR;

J :=1;

I :=I+5;

V_COUNT :=V_COUNT+1;

else

V_STR :=V_STR||V_TEMP_CHAR;

i :=i+1;

j :=j+3;

end if;

end if;

else

--判斷當前字符的下一個是不是

V_TEMP_CHAR_T:=SUBSTR(V_TEMP,I+1,1);

--判斷當前字符的下下一個是不是

V_TEMP_CHAR_W:=SUBSTR(V_TEMP,I+2,1);

if V_TEMP_CHAR_T = '

V_TEMP_CHAR:=SUBSTR(V_TEMP,I,5);

V_STR :=V_STR||V_TEMP_CHAR;

J :=1;

I :=I+5;

V_COUNT :=V_COUNT+1;

elsif V_TEMP_CHAR_T = chr(13) then

if V_TEMP_CHAR_W = '

V_TEMP_CHAR:=SUBSTR(V_TEMP,I,5);

V_STR :=V_STR||V_TEMP_CHAR;

J :=1;

I :=I+5;

V_COUNT :=V_COUNT+1;

end if;

else

--判斷中文標點

select instr('。,?!.',upper(V_TEMP_CHAR_T)) into V_COUNT_CH_NUM from dual;

if V_COUNT_CH_NUM > 0 then

V_STR :=V_STR||V_TEMP_CHAR||V_TEMP_CHAR_T||'
';

J:=1;

I :=I+2;

V_COUNT :=V_COUNT+1;

else

V_STR :=V_STR||V_TEMP_CHAR||'
';

J:=1;

I :=I+1;

V_COUNT :=V_COUNT+1;

end if;

end if;

end if;

END LOOP;

RETURN(V_STR);

END FUN_STR_SPLIT;

三、通過函數轉換后查詢值

四、轉后字段在潤乾中展現效果

總結

以上是生活随笔為你收集整理的Oracle区分中文和英文,oracle中中英文段落划分实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。