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.mzph.cn/news/282892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟机网络配置详解(NAT、桥接、Hostonly)

VirtualBox中有四种网络连接方式: NATBridged AdapterInternalHost-only AdapterVMWare中有三种&#xff0c;其实它跟VMWare的网络连接方式都是一样的概念&#xff0c;只是比VMWare多了Internal方式 在介绍四种工作模式之前&#xff0c;先说下虚拟网卡&#xff0c;虚拟机安装好…

微软宣布正式开源 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…

虚拟DOM Diff算法解析

React中最神奇的部分莫过于虚拟DOM&#xff0c;以及其高效的Diff算法。这让我们可以无需担心性能问题而”毫无顾忌”的随时“刷新”整个页面&#xff0c;由虚拟DOM来确保只对界面上真正变化的部分进行实际的DOM操作。React在这一部分已经做到足够透明&#xff0c;在实际开发中我…

Azure 跨订阅迁移资源踩坑记

突然收到微软的邮件&#xff0c;提示我的一个 Azure 订阅已经到期&#xff0c;所以转为“禁用”状态&#xff0c;只能进行数据的导出和处理。在这个订阅里有不少较重要的资源在跑&#xff0c;直接关了可不行…于是开启了一个支持事件&#xff0c;台湾美眉的态度和声线真的没话说…

《ASP.NET Core 6框架揭秘》实例演示[25]:配置与承载环境的应用

与服务注册一样&#xff0c;针对配置的设置同样可以采用三种不同的编程模式。第一种是利用WebApplicationBuilder的Host属性返回的IHostBuilder对象&#xff0c;它可以帮助我们设置面向宿主和应用的配置。IWebHostBuilder接口上面同样提供了一系列用来对配置进行设置的方法&…

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…

node的模块机制

Node.js模块的实现 之前在网上查阅了许多介绍Node.js的文章&#xff0c;可惜对于Node.js的模块机制大都着墨不多。在后续介绍模块的使用之前&#xff0c;我认为有必要深入一下Node.js的模块机制。 CommonJS规范 早在Netscape诞生不久后&#xff0c;JavaScript就一直在探索本地编…

httpstat:一个检查网站性能的 curl 统计分析工具

httpstat&#xff1a;一个检查网站性能的 curl 统计分析工具httpstat 是一个 Python 脚本&#xff0c;它以美妙妥善的方式反映了 curl 统计分析&#xff0c;它是一个单一脚本&#xff0c;兼容 Python 3 &#xff0c;在用户的系统上不需要安装额外的软件(依赖)。作者&#xff1a…

关于面试中看到一些问题

最近公司在招聘.NET开发人员&#xff0c;面试了一些人&#xff0c;有一些感悟&#xff0c;分享出来&#xff0c;以供参考。面试的人员中&#xff0c;有一些是三五年的开发人员&#xff1b;也有几个是10年左右的技术负责人&#xff0c;不但自己架构过项目&#xff0c;还有带领导…

一个countDown在多线程调度下使用不当的分享

2019独角兽企业重金招聘Python工程师标准>>> 一个countDown在多线程调度下使用不当的分享 1. 诡异的数据抖动 在一个需求开发过程中&#xff0c;由于有多角色需要获取每个角色下的菜单&#xff1b;结果出现了单角色下拉去菜单没问题&#xff0c;多角色情况下只有一个…

linux脚本打印循环次数,shell脚本编程基础(3)——循环用法

本节索引&#xff1a;一、if、case条件判断二、for、while及until循环三、循环控制语句continue、break、shift及select菜单四、信号捕捉trap在前面的基础编程内容中&#xff0c;我们已经学习了shell脚本的顺序执行及选择执行&#xff0c;通过这两种方式&#xff0c;可以帮我们…

EF CORE 7 中的新功能:使用 ExecuteDelete 和 ExecuteUpdate 进行批量操作

原文链接&#xff1a;https://timdeschryver.dev/blog/new-in-entity-framework-7-bulk-operations-with-executedelete-and-executeupdate原文作者&#xff1a;tim_deschryver翻译&#xff1a;沙漠尽头的狼(谷歌翻译加持)Entity Framework 7 包括一些已被要求的流行功能&#…

java 简单json和对象相互转换

2019独角兽企业重金招聘Python工程师标准>>> package Fasterxml; import com.fasterxml.jackson.databind.ObjectMapper; import mode.User; import java.io.StringWriter; import java.util.ArrayList; import java.util.List;/*** maven...**<dependency>* …

畅想动画制作的乐趣

为什么要制作动画&#xff1f; 现在的营销活动&#xff0c;用一个很简单的图片去吸引消费者已经远远不够。想让消费者创造GMV&#xff0c;肯定需要让消费者觉得眼前一亮或是有视觉冲击的东西&#xff0c;或者在动画过程中提供更好的引导部分&#xff0c;比如红包&#xff0c;引…

Spring Cloud Gateway 原生支持接口限流该怎么玩

关于pig&#xff1a; 基于Spring Cloud、oAuth2.0开发基于Vue前后分离的开发平台&#xff0c;支持账号、短信、SSO等多种登录&#xff0c;提供配套视频开发教程。 关于 Spring Cloud Gateway SpringCloudGateway是Spring官方基于Spring 5.0&#xff0c;Spring Boot 2.0和Projec…

我的手机 不支持箭头函数

不支持&#xff0c;要换成function的形式 转载于:https://www.cnblogs.com/web-fusheng/p/7295901.html

中标麒麟linux卸载qt,国产化 银河麒麟编译Qt程序的问题汇总 | 阿拉灯

Run in terminal莫名奇妙软件无法在QtCreator中运行或者调试&#xff0c;main函数都无法进入&#xff0c;QtCreator中一运行就崩溃&#xff0c;并跳到汇编界面&#xff0c;这多半和代码没什么关系&#xff0c;我这里是将项目->运行中的“Run in terminal”去掉勾选&#xff…