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中中英文段落划分实现相关推荐

  1. php判断中文字符长度,JavaScript_JS判断字符串长度的5个方法(区分中文和英文),目的:计算字符串长度(英文占 - phpStudy...

    JS判断字符串长度的5个方法(区分中文和英文) 目的:计算字符串长度(英文占1个字符,中文汉字占2个字符) 方法一: String.prototype.gblen = function() { var ...

  2. esp32使用MicroPython驱动oled屏显示中文和英文

    文章目录 esp32使用MicroPython驱动oled屏显示中文和英文 介绍 安装 特点 开源 硬件连接 API 示例 显示英文字符 显示汉字 参考链接 esp32使用MicroPython驱动o ...

  3. 中文和英文用不同的样式

    一.css方法: 先定义一个英文字体再定义中文字体,这是因为英文字体中一般不含有中文,执行的时候英文和阿拉伯数字选用"Arial",中文的字体使用第二个字体"微软雅黑&q ...

  4. JS-只能输入中文和英文

    <span style="font-family:KaiTi_GB2312;">转自:<a target=_blank href="http://www ...

  5. 自己收集整理的微软错误代码大全(中文和英文)

    自己收集整理的微软错误代码大全,分别为中文和英文部分,供广大软件开发人员共勉.                  微软错误代码 2.1  中文 0 操作成功完成. 1 功能错误. 2 系统找不到指定的 ...

  6. JS正则验证输入框姓名只能输入中文和英文

    js只包含中文和英文 name: [{required: true,message: '请输入姓名',trigger: 'blur'},{pattern: /^[a-zA-Z\u4e00-\u9fa5 ...

  7. 验证中文和英文姓名 正则表达式

    出处:https://blog.csdn.net/kekekeqi/article/details/80881718 参考上面链接文章,以访丢失,再次粘贴一次 ^([\u4e00-\u9fa5]{2, ...

  8. 【HTML】关于height值设置和显示不同的原因以及font-size对象为中文和英文的区别

    关于height值设置和显示不同的原因 height: 100px; CSS中把高度设置为100px,但是实际测量发现高度为125px 这个是因为:笔记本默认显示大小为125%,所以100的125%就 ...

  9. date日期格式中文和英文显示

    date日期格式中文和英文显示 ##背景 由于日志文件里面输出的日期格式是'24-Dec-2019'这样的,但是在写脚本获取日期的时候,一直显示 '24-12月-2019'这样的格式导致匹配不到相应日 ...

最新文章

  1. 剑指offer_第6题_旋转数组的最小数字
  2. ubuntu 10.04源 更新源列表
  3. 史上最全Java多线程面试题及答案
  4. C++为什么要内存对齐
  5. mysql innodb引擎--范围查询优化
  6. 适应各个浏览器的iframe高度自动调整
  7. 使用ssh免密码登录Linux服务器
  8. 日记2015.11.5
  9. thymeleaf与jsp_PagingAndSortingRepository –如何与Thymeleaf一起使用
  10. Jsp+SpringMVC+Mysql实现的进销存库存管理系统附带论文
  11. 读《那些年,那些事 一个程序猿的奋斗史》 一点自己的感触
  12. PHP连接MongoDB
  13. 【比赛】新冠肺炎疫情趋势预测大赛~推荐大家参加下
  14. HTTP URL长度限制
  15. 高精度乘法———列表法
  16. 微信公众号上传永久图片素材(将阿里云图片上传至微信公众号图片素材)
  17. 用户评分系统设计与实现(风控方向)
  18. 华为p4不是鸿蒙吗怎么又改为安卓_鸿蒙系统是不是就是改版的安卓系统?
  19. 阿里云云平台,物联网可视化web界面简单教程
  20. fNIRS功能近红外数据处理服务

热门文章

  1. Exchange 2010 DAG转载
  2. C#网络类智能开关控制板实例
  3. ML.NET Cookbook:(4)如何调试实验或预览管道?
  4. 64位Visual Studio 2022,微软在下一盘大棋!
  5. 客官,.NETCore无代码侵入的模型验证了解下
  6. Magicodes.IE 2.4发布
  7. .NET Core 下使用 RabbitMQ
  8. gRPC真要取代WebApi了,你还学得过来吗?
  9. 微软 PowerBI 被评为商业智能领导者-13年的企业产品奋斗史解读
  10. 动手造轮子:写一个日志框架