Oracle區分中文和英文,oracle中中英文段落劃分實現

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

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

具體實例實現:

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

0818b9ca8b590ca3270a3433284dd417.png

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

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;

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

0818b9ca8b590ca3270a3433284dd417.png

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

0818b9ca8b590ca3270a3433284dd417.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282892.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282892.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282892.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

未來哪些行業值得加入?

閱讀本文大概需要5分鐘。這個問題很多讀者都問過&#xff0c;基本上每隔幾篇原創就會有人留言問&#xff0c;還有公眾號后臺和知乎私聊。之前在一次留言中我承諾專門開一篇文章來聊聊這個話題&#xff0c;今天想著要兌現這個諾言了。為啥最近會存在這個問題呢&#xff0c;原因其…

虛擬機網絡配置詳解(NAT、橋接、Hostonly)

VirtualBox中有四種網絡連接方式: NATBridged AdapterInternalHost-only AdapterVMWare中有三種&#xff0c;其實它跟VMWare的網絡連接方式都是一樣的概念&#xff0c;只是比VMWare多了Internal方式 在介紹四種工作模式之前&#xff0c;先說下虛擬網卡&#xff0c;虛擬機安裝好…

Oracle收款核銷了怎么撤銷,21應收收款-核銷取消或核銷調整

注&#xff1a;本課程不包含學習下載資料目標人群&#xff1a;1、Oracle ERP/EBS初級顧問和技術顧問&#xff1b; 1、Oracle ERP/EBS用戶熟練學習ERP系統的基本設置功能&#xff1b; 2、Oracle ERP/EBS財務初級顧問的學習&#xff1b; 3、其他對Oracle ERP/EBS有興趣的想轉行如…

微軟宣布正式開源 Azure IoT Edge 邊緣計算服務

開發四年只會寫業務代碼&#xff0c;分布式高并發都不會還做程序員&#xff1f; 微軟宣布&#xff0c;去年年底公開預覽的 Azure IoT Edge 邊緣計算服務已進入官方版&#xff0c;并通過 GitHub 將其開源。Azure IoT Edge 主要將基于云的分析和定制的業務邏輯轉移到邊緣設備&a…

Windows下安裝BeautifulSoup

電腦首先要安裝好了python&#xff0c;我安裝的是2.7。 下面就是bs4的安裝過程了: 1.去官網下載BeautifulSoup4 2017.02.10目前最新版本&#xff1a;Beautiful Soup 4.3.2 2.解壓文件 將下載得到的壓縮包解壓到任意文件夾&#xff0c;路徑不含中文 3.打開cmd命令提示符 winr&am…

BZOJ1578: [Usaco2009 Feb]Stock Market 股票市場

S<50只股票D<10天的價格給出&#xff0c;求第一天開始用n<200000元最后能得到的最大錢數&#xff0c;保證答案<500000。 做D次完全背包即可&#xff0c;每次做完把dp數組清空。 1 #include<cstdio>2 #include<cstring>3 #include<algorithm>4 #i…

OC如何跳到系統設置里的各種設置界面

當 iOS系統版本 < iOS7時 , 只能跳轉到 系統設置頁面 &#xff0c;樓主試了下&#xff0c;非真機是沒有任何效果的 當iOS系統版本 < iOS 10.0 時 NSURL *url [NSURL URLWithString:"prefs:rootLOCATION_SERVICES"]; if( [[UIApplication sharedApplication]can…

oracle 注冊程序,oracle 靜態注冊

1. 最近在裝ASMDATAGUARD&#xff0c; 在靜態注冊上面吃了大虧&#xff0c;現總結如下2. 在Asm環境中&#xff0c;listener監聽器在grid用戶下DGLSN (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST asm)(PORT 1521))))SID_LIST_DGLSN (SID_LIST (SID_DESC (…

Linux下find用法總結

find:實時查找工具&#xff0c;通過遍歷指定起始路徑下的文件系統層級結構完成文件查找:工作特性:查找速度略慢精確查找實時查找用法:find [option] [查找起始路徑][查找條件][處理動作]查找起始路徑&#xff1a;指定具體搜索目標起始路徑&#xff1b;默認為當前目錄查找條件:指…

虛擬DOM Diff算法解析

React中最神奇的部分莫過于虛擬DOM&#xff0c;以及其高效的Diff算法。這讓我們可以無需擔心性能問題而”毫無顧忌”的隨時“刷新”整個頁面&#xff0c;由虛擬DOM來確保只對界面上真正變化的部分進行實際的DOM操作。React在這一部分已經做到足夠透明&#xff0c;在實際開發中我…

生成ID模板:年月日時分秒+6位自增碼

因為生成訂單ID、商品ID 或者什么什么ID的&#xff0c;不想用自增&#xff0c;又怕反復&#xff0c;于是就用 年與日時分秒 6位自增碼 &#xff08;共計20位長度&#xff09;來當作ID 注意&#xff1a;假設你的ID是Long型。就要注意&#xff0c;Long的最大長度為19位&#xf…

oracle optimizer_features_enable,Oracle Optimizer:遷移到使用基于成本的優化器—–系列2.1-數據庫專欄,ORACLE...

oracle optimizer:遷移到使用基于成本的優化器—–系列2.1系列之二包含影響優化器選擇執行計劃的初始化參數和oracle內部隱藏參數&#xff0c;合理設置這些參數對于優化器是相當重要的。6.影響優化器的初始化參數除了生成統計資料之外&#xff0c;下面提及的參數設置在你的系統…

Azure 跨訂閱遷移資源踩坑記

突然收到微軟的郵件&#xff0c;提示我的一個 Azure 訂閱已經到期&#xff0c;所以轉為“禁用”狀態&#xff0c;只能進行數據的導出和處理。在這個訂閱里有不少較重要的資源在跑&#xff0c;直接關了可不行…于是開啟了一個支持事件&#xff0c;臺灣美眉的態度和聲線真的沒話說…

階乘的精確性

/* 輸入不超過1000的正整數n&#xff0c;輸出n!1*2*3*……*n的精確結果。 樣例輸入&#xff1a;30 樣例輸出&#xff1a;265252859812191058636308480000000 例如 n3&#xff1b;s6&#xff1b; n4&#xff1b;s24&#xff1b; n5&#xff1b;s120&#xff1b; 1000的階乘需要一…

Optaplanner規劃引擎的工作原理及簡單示例(1)

在之前的文章中&#xff0c;老猿已介紹過APS及規劃的相關內容&#xff0c;也對Optaplanner相關的概念和一些使用示例進行過介紹&#xff0c;接下來的文章中&#xff0c;我會自己做一個規劃小程序 - 一個關于把任務分配到不同的機臺上進行作來的小程序&#xff0c;并在這個小程序…

[HNOI2017]禮物

題目描述 我的室友最近喜歡上了一個可愛的小女生。馬上就要到她的生日了&#xff0c;他決定買一對情侶手環&#xff0c;一個留給自己&#xff0c;一個送給她。每個手環上各有 n 個裝飾物&#xff0c;并且每個裝飾物都有一定的亮度。 但是在她生日的前一天&#xff0c;我的室友突…

《ASP.NET Core 6框架揭秘》實例演示[25]:配置與承載環境的應用

與服務注冊一樣&#xff0c;針對配置的設置同樣可以采用三種不同的編程模式。第一種是利用WebApplicationBuilder的Host屬性返回的IHostBuilder對象&#xff0c;它可以幫助我們設置面向宿主和應用的配置。IWebHostBuilder接口上面同樣提供了一系列用來對配置進行設置的方法&…

oracle的除,Oracle數據庫如何去除別名 - daiyan0526的個人空間 - 51Testing軟件測試網 51Testing軟件測試網-軟件測試人的精神家園...

本人曾經用Personal OracleDeveloper2000開發了一些程序&#xff0c;當移植到FOR NT的時候發現有些功能出現了出錯提示。經研究發現原來是用戶沒有能正常連接。由于在developer2000連接personal oracle時不需要別名(alias)&#xff0c;直接寫入用戶名/密碼則可。而在OracleFOR …

Java 之 JavaScript (一)

1.JavaScripta.定義&#xff1a;JavaScript是腳本語言&#xff0c;是一種輕量級的編程語言b.實現&#xff1a;①直接通過標簽里面的onXX屬性驅動js的執行<input type"button" value"測試" οnclick"alert(‘hello‘)">②引入外部js文件——…

Linux日志出現大量kernel: NET: Registered protocol family 36

一臺Linux服務器的系統錯誤日志出現大量的“ kernel: NET: Registered protocol family 36”錯誤信息&#xff0c;如下所示&#xff1a; Jul 2 05:27:45 xxxxxx kernel: NET: Registered protocol family 36Jul 2 05:27:45 xxxxxx kernel: NET: Unregistered protocol family…