oracle 过滤字段中的中文,不再洋不洋土不土

news2024/11/18 1:44:51

目录

前言:

 一、知己知彼

      1.1业务场景

     1.2错误案例

二、思路整理

      2.1存储长度与字符串长度比较

三、还有没有其他思路

      3.1ascii表查找法

     3.2正式案例

 四、总结

前言:

        随着数字化建设的不断深入,企业越来越注重,企业数据治理,通过数据消费来辅助决策。作为全球新能源行业综合服务商。我们企业也遇到了很多特殊的业务。当然每个企业都会遇到业务数字化后,总会留些口子来处理 一些“费力不讨好的业务”。即业务量很小,标准化管控不值当。当然这些业务也会被完整纳入线上化,麻雀虽小,五脏俱全。这就导致了,在综合业务分析时发现,一些很讨厌的“异常数据”如批次中带有中文之类的。今天和大家来分享,怎么处理这些中文+英文的“洋土批次”。总结在任何企业都适用的中文处理。

 一、知己知彼

        中文为啥会存在?

      1.1业务场景

        如上图所示,有些自定义的业务批次的批号不是系统自动生成的,而是通过手工录入系统中,虽然有说一定的制度约束,但是为了方便查看对应含义,不可避免加入了汉字。在网上查看了很多关于过滤中文的SQ说实话,差点意思,基本都不能满足需求,因此想系统整理来避免浪费大家的时间,也可以在自己需要时随时查看~

     1.2错误案例

        错误示例

select *
from table_name
where regexp_like(text_field, '[\u4E00-\u9FA5]');

         错误诠释

        上面的代码使用regexp_like函数,通过指定字符unicode值范围,从而实现过滤中文字符的功能,其中unicode值按照中文汉字的范围设置,\u4E00 – \u9FA5是中文汉字 unicode编码表中最常用的字符范围,一般情况下即可满足需求。

        错误效果示例

        如下图所示最后出来的批次和没过滤是一样的。

         原因分析

        具体原因,可以参考我以前写的文章说明,在oracle我们不能根据unicode范围来过滤中文。

oracle替换字符串中的中文_oracle去除字符串中的汉字_他们叫我技术总监的博客-CSDN博客

二、思路整理

      2.1存储长度与字符串长度比较

        中文在oracle 数据库存储时,一个中文会占用两个字符以上。具体要看数据库的字符集编码。一般情况下,数据库的NLS_CHARACTERSET 为AL32UTF8或UTF8,即一个汉字占用三到四个字节。如果NLS_CHARACTERSET为ZHS16GBK,则一个中文占用两个字节

                         如上图所示一个中文占用了2个字节。

        因此我们就可以使用第一种办法啦,就是通过lengthb('中文')!=length('中文')来找到,包含中文的批号啦。正确示例案例如下图所示

        代码:

--查询带中文的数据
 select 生产批次号   from   BI.QZ_zB_GCPJCSJ zb  
          where 1=1 
          and flag='已清洗'
          and LENGTH(生产批次号)!= LENGTHB(生产批次号);--查询中文批次

--查询非中文的数据
 select 生产批次号   from   BI.QZ_zB_GCPJCSJ zb  
          where 1=1 
          and flag='已清洗'
          and LENGTH(生产批次号)!= LENGTHB(生产批次号);--查询非中文批次

        效果:

       

         诠释:

        如上图所示,通过LENGTH(生产批次号)!= LENGTHB(生产批次号)就能找到包含中文的批次了。因此我们如果只想看非中文的批次,我们使用LENGTH(生产批次号)= LENGTHB(生产批次号)就能达到目的啦,是不是非常简单。

三、还有没有其他思路

        在上面我们使用中文的存储规则来过滤中文数据,其实我们还可以利用ascii表的规则来查询中文数据。

      3.1ascii表查找法

        批次规则一般包括数字、字母、特殊符号和汉字,去掉ascii表里面没有的字符不就是中文了。详情可参考对应ascii表。

        具体我们将中文替换成一个不会出现的复杂字符串,如“他们叫我技术总监”如果判定替换后的字符串是否包含“他们叫我技术总监”的字符即可。详情看下面案例。

     3.2正式案例

        代码:

    select 生产批次号
            from BI.QZ_ZB_GCPJCSJ
          
           where instr(regexp_replace(生产批次号,
                                      '[' || chr(128) || '-' || chr(255) || ']',
                                      '他们叫我技术总监'),
                       '他们叫我技术总监',
                       1,
                       1) > 0
--将中文替换为一个不可能出现的字符,然后判断替换的字符串是否包含对应的字符

         效果:

        诠释:

         我们将中文替换成一个不会出现的复杂字符串,然后再判定替换后的字符串是否包含替换后的字符即可。对应替换后的字符串是中文即可

 四、总结

        在本次文章中,包含了常用所有的中文处理方案,如查找包含中文的数据、查找非中文的数据,将中文替换成其他字符等。当然我们有时候还需要在一堆包含中文的字符串中获取数字、日期等。如“2.2元/斤”,获取2.2作为单价。如“2023-06-22我们在一起”获取2023-06-22的日期用来分析。对应处理方法我在往前做了文章说明,希望对大家有用,不再去网上浪费时间搜索错误的教程了~

oracle-替换中文、回车、换行、倒序截取等,从OA一堆意见里面找出你想要的审批日期_oracle替换换行符_他们叫我技术总监的博客-CSDN博客

从数据库字符串中获取数字部分,用于数据分析_在字符串123456中截取出2345数据库_他们叫我技术总监的博客-CSDN博客

       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/695979.html

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

相关文章

滨海高新区管委会副主任崔同湘一行莅临GBASE南大通用调研

GBASE生态发展部总经理武小钢热情引导崔同湘主任一行参观企业展厅,详细介绍了GBASE专注国产数据库领域二十年的发展历程,汇报公司在研发创新、市场应用、生态建设等方面的成果,崔副主任对GBASE近年来在数据库细分行业的发展和取得的重要成果表…

(二十一)数据符号化——矢量数据符号化①

数据符号化——矢量数据符号化 符号化有两个含义:在地图设计工作中,地图数据的符号化是指利用符号将连续的数据进行分类分级、概括化、抽象化的过程。而在数字地图转换为模拟地图过程中,地图数据的符号化指的是将已处理好的矢量地图数据恢复成连续图形&…

数值优化简介

数值优化这个名字来源于一本书,名为《Numerical Optimization》。 Numerical Optimization这两个单词传递了两个知识领域的概念: Optimization指的是数学概念上的优化,即求最优解,也可以理解为求函数的最小值的解; Num…

【Java高级语法】(二十二)运行时环境访问支持类:API知识总结分享,深入解析Runtime运行时环境访问支持类~

Java高级语法详解之运行时环境访问支持类 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 Runtime 类常用方法3.2 使用技巧 4️⃣ 应用场景5️⃣ 业务场景实战5.1 场景一:执行外部脚本5.2 场景二:动态加载类 🌾 总结 1️⃣ 概念 Java Runtime 类是…

去面试测试开发你必须要知道的基本知识(建议收藏)

目录 1.对测试开发的理解 2.为什么做测试而不是去做开发 3.如何处理矛盾 4.职业发展 5.你认为测试人员需要具备哪些素质。(你有哪些优点围绕这些来说) 6.你为什么能够胜任这个岗位 7.测试方法 黑盒测试 白盒测试 8.测试的阶段 9.测试的类型 …

SpringBoot - 集成Quartz框架之常用配置

Quartz是一款Java编写的开源任务调度框架,同时它也是Spring默认的任务调度框架。它的作用其实类似于Java中的Timer定时器以及JUC中的ScheduledExecutorService调度线程池,当然Quartz作为一个独立的任务调度框架无疑在这方面表现的更为出色,功…

四章:FTP详细介绍+winServer2008搭建ftp服务器+winServer2008开启端口

目录 一、FTP介绍 二、FTP服务器架设 三、FTP服务器连接验证 四、winServer2008开启端口 一、FTP介绍 FTP就是文件传输协议。用于互联网双向传输,控制文件下载空间在服务器复制文件从本地计算机或本地上传文件复制到服务器上的空间。 我们在工作中经常使用到FTP…

golang,OpenGL,计算机图形学(三)

代码仓库 https://github.com/phprao/go-graphic 颜色 光源照射到物体上,一部分颜色被吸收,另一部分无法吸收的被反射到人眼,于是呈现出了颜色。 当我们把光源的颜色与物体的颜色值相乘(而不是点乘),所…

【C语言初阶】带你轻松玩转所有常用操作符最终篇——下标引用、函数调用和结构体成员,表达式求值

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,这里是君兮_,前几天非常忙没空更新,现在终于闲下来了,这是今天爆肝更新的第二篇,也是我们【C语言初阶】带你轻松玩转所有常用操作符的最后一篇,废话不多说…

nestjs post请求提交数据量太大会报错 [ExceptionsHandler] request entity too large

背景 在传给后端接口的数据,是一个超过1.5mb的json字符串,通过nest filter的时候直接被拦截掉了,返回【 请求体太长】的错误。 还没有到达contraller,就直接被框架拦截掉了, import { ExceptionFilter, Catch, Argu…

vue——实现表格的拖拽排序功能——技能提升

最近在写后台管理系统时,遇到一个需求,就是要实现表格的排序。 就是拖动某一行数据,放在指定位置,然后保存的时候根据最终的排序来处理生产单顺序字段。 参考大神的链接:vue-实现拖拽排序功能:https://ju…

mac苹果电脑,怎么批量修改文件名称

mac苹果电脑,如何批量修改文件名称?在苹果电脑上对文件名称进行修改是一件非常简单的操作,相信任何mac电脑用户都知道怎么操作,只需要选中要修改名称的文件,然后点击鼠标右键,然后会弹出一个菜单&#xff0…

layui代码记录

// 归档弹框jsguiDangRemarkInfo : function(activiti, buttonConf, call) {layui.use([layer, form, laydate], function () {var layer layui.layer;var form layui.form;var laydate layui.laydate;layer.open({type: 1,title: 归档备注信息,area: [350px, 300px],conten…

Redis 6.2.4集群搭建

1. 说明 这里使用的是redis的cluster集权模式,没有用哨兵模式(哨兵模式依赖哨兵节点,哨兵节点一旦挂掉就不再高可用了,因此没有采用)。 由于Redis Cluster至少需要6个节点,因此,这里咱们采用的…

【运维】Linux系统 AnolisOS [CentOs替代品]

【运维】AnolisOS 安装 CentOs替代品 下载 - OpenAnolis 龙蜥操作系统开源社区 Index of /anolis/ (aliyun.com)

(编辑器)HBuilderX怎么自动格式化代码

(编辑器)HBuilderX怎么自动格式化代码 解决参考:https://blog.csdn.net/G806218/article/details/127833356

CSDN 个性化推荐的数据治理

目录 1. 背景2. 数据治理2.1 从内容层面提升数据质量2.2 从用户层面提升数据质量2.3 增加特定数据的曝光2.4 保证数据的正确性与实效性 3. 总结 相关阅读 CSDN 个性化推荐系统的设计和演进如何支持研发对CSDN个性化推荐系统重构 1. 背景 CSDN 的个性化推荐流在主站中是一个很…

用UDP套接字实现客户端和服务端通信

IP地址和port端口号 IP地址 数据有IP(公网)标识一台唯一的主机。 port端口号 为了更好的标识一台主机上服务进程的唯一性,我们采用端口号port,标识服务器进程,客户端进程的唯一性! ip端口号 IP地址(主机全网唯一性) 该主机上的端…

一年省七位数,得物自建HFDS在 Flink Checkpoint 场景下的应用实践

1 背景 随着Flink实例的迁移下云以及新增需求接入,自建Flink平台规模逐渐壮大,当前总计已超4万核运行在自建的K8S集群中,然而 Flink 任务数的增加,特别是大状态任务,每次Checkpoint 时会产生脉冲式带宽占用&#xff0…

统计项目代码行数工具cloc

Ubuntu用户 使用cloc在ubuntu内统计代码行数 安装cloc工具 sudo apt-get install cloc进入需要统计的目录内,然后执行 cloc .然后就会显示文件目录中的文件数(files)、空白行数(blank)、注释行数(comment)和代码行数(code)。 Windows 用户 也是使用cloc工具 …