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中中英文段落划分实现相关推荐
- php判断中文字符长度,JavaScript_JS判断字符串长度的5个方法(区分中文和英文),目的:计算字符串长度(英文占 - phpStudy...
JS判断字符串长度的5个方法(区分中文和英文) 目的:计算字符串长度(英文占1个字符,中文汉字占2个字符) 方法一: String.prototype.gblen = function() { var ...
- esp32使用MicroPython驱动oled屏显示中文和英文
文章目录 esp32使用MicroPython驱动oled屏显示中文和英文 介绍 安装 特点 开源 硬件连接 API 示例 显示英文字符 显示汉字 参考链接 esp32使用MicroPython驱动o ...
- 中文和英文用不同的样式
一.css方法: 先定义一个英文字体再定义中文字体,这是因为英文字体中一般不含有中文,执行的时候英文和阿拉伯数字选用"Arial",中文的字体使用第二个字体"微软雅黑&q ...
- JS-只能输入中文和英文
<span style="font-family:KaiTi_GB2312;">转自:<a target=_blank href="http://www ...
- 自己收集整理的微软错误代码大全(中文和英文)
自己收集整理的微软错误代码大全,分别为中文和英文部分,供广大软件开发人员共勉. 微软错误代码 2.1 中文 0 操作成功完成. 1 功能错误. 2 系统找不到指定的 ...
- JS正则验证输入框姓名只能输入中文和英文
js只包含中文和英文 name: [{required: true,message: '请输入姓名',trigger: 'blur'},{pattern: /^[a-zA-Z\u4e00-\u9fa5 ...
- 验证中文和英文姓名 正则表达式
出处:https://blog.csdn.net/kekekeqi/article/details/80881718 参考上面链接文章,以访丢失,再次粘贴一次 ^([\u4e00-\u9fa5]{2, ...
- 【HTML】关于height值设置和显示不同的原因以及font-size对象为中文和英文的区别
关于height值设置和显示不同的原因 height: 100px; CSS中把高度设置为100px,但是实际测量发现高度为125px 这个是因为:笔记本默认显示大小为125%,所以100的125%就 ...
- date日期格式中文和英文显示
date日期格式中文和英文显示 ##背景 由于日志文件里面输出的日期格式是'24-Dec-2019'这样的,但是在写脚本获取日期的时候,一直显示 '24-12月-2019'这样的格式导致匹配不到相应日 ...
最新文章
- 剑指offer_第6题_旋转数组的最小数字
- ubuntu 10.04源 更新源列表
- 史上最全Java多线程面试题及答案
- C++为什么要内存对齐
- mysql innodb引擎--范围查询优化
- 适应各个浏览器的iframe高度自动调整
- 使用ssh免密码登录Linux服务器
- 日记2015.11.5
- thymeleaf与jsp_PagingAndSortingRepository –如何与Thymeleaf一起使用
- Jsp+SpringMVC+Mysql实现的进销存库存管理系统附带论文
- 读《那些年,那些事 一个程序猿的奋斗史》 一点自己的感触
- PHP连接MongoDB
- 【比赛】新冠肺炎疫情趋势预测大赛~推荐大家参加下
- HTTP URL长度限制
- 高精度乘法———列表法
- 微信公众号上传永久图片素材(将阿里云图片上传至微信公众号图片素材)
- 用户评分系统设计与实现(风控方向)
- 华为p4不是鸿蒙吗怎么又改为安卓_鸿蒙系统是不是就是改版的安卓系统?
- 阿里云云平台,物联网可视化web界面简单教程
- fNIRS功能近红外数据处理服务