Oracle-如何判断字符串包含中文字符串(汉字),删除中文内容及保留中文内容

今天遇见一个问题需要将字段中包含中文字符串的筛选出来

--建表
CREATE TABLE HADOOP1.AAA
(
ID VARCHAR2(255)
);
--添加字段
 INSERT INTO HADOOP1.AAA(ID)
 VALUES('理解');
 ....
 --查询表内容
 SELECT * FROM HADOOP1.AAA;

在这里插入图片描述

在网上查找了一下有以下三种方式:

第一种:通过中文字符在length与lengthb的字节长度不同来判断

length计算字符长度,lengthb计算字节长度

select id,length(id),lengthb(id) from HADOOP1.AAA

在这里插入图片描述

筛选出包含中文的字符串

select id,length(id),lengthb(id) from HADOOP1.AAA where length(id) !=lengthb(id)

在这里插入图片描述

第二种:通过asciistr的转换性质将中文字符串筛选出来

ASCIISTR函数,参数是一个字符串,如果这个字符在ASCII码表中有,则转成ASCII表中的字符。如果没有,则转成\xxxx格式,xxxx是UTF-16的编码。

下面是ASCII表

    chr(9) tab空格       chr(10) 换行      chr(13) 回车        Chr(13)&chr(10) 回车换行       chr(32) 空格符       chr(34) 双引号       chr(39) 单引号
    chr(33) !        chr(34) "        chr(35) #        chr(36) $        chr(37) %        chr(38) &        chr(39) '        chr(40) (        chr(41) )        chr(42) *
    chr(43) +        chr(44) ,        chr(45) -        chr(46) .        chr(47) /
    Chr(48) 0        Chr(49) 1        Chr(50) 2        Chr(51) 3        Chr(52) 4        Chr(53) 5        Chr(54) 6        Chr(55) 7        Chr(56) 8        Chr(57) 9
    chr(58)            chr(59) ;        chr(60) <        chr(61) =        chr(62) >        chr(63) ?        chr(64) @
    chr(65) A        chr(66) B        chr(67) C        chr(68) D        chr(69) E        chr(70) F        chr(71) G        chr(72) H         chr(73) I          chr(74) J
    chr(75) K        chr(76) L        chr(77) M        chr(78) N        chr(79) O        chr(80) P        chr(81) Q        chr(82) R        chr(83) S        chr(84) T
    chr(85) U        chr(86) V        chr(87) W        chr(88) X        chr(89) Y        chr(90) Z
    chr(91) [        chr(92) \        chr(93) ]        chr(94) ^        chr(95) _        chr(96) `
    chr(97) a        chr(98) b        chr(99) c        chr(100) d        chr(101) e       chr(102) f       chr(103) g       chr(104) h        chr(105) i
    chr(106) j        chr(107) k       chr(108) l        chr(109) m       chr(110) n       chr(111) o       chr(112) p        chr(113) q       chr(114) r
    chr(115) s       chr(116) t        chr(117) u       chr(118) v       chr(119) w       chr(120) x        chr(121) y       chr(122) z
    chr(123) {       chr(124) |       chr(125) }       chr(126) ~        chr(127)          chr(128)         chr(153)chr(169) ©          chr(174) ®


在这里插入图片描述

如果表中只有中文和英文、数字等字符,则可以用\来判断是否带有中文。
使用asciistr函数得出是否字段里面包含“/”,因为当中文字符转换为ascii后,变成“/FFFD/FFFD”,但是需要注意一个特殊字符“/”,当它出现的时候转换后的码为“/005C”

代码运行:

select id,asciistr(id) from HADOOP1.AAA 

在这里插入图片描述

运用:

select * from HADOOP1.AAA  where  REPLACE(asciistr(id),'\005C','') like '%\%'

在这里插入图片描述

注释:在上面图结果中可以看出包含中文的字符串通过asciistr,转换成包含“\”的字符串,但是这个数据方法有个弊端,原始字符串中不能包含“\”。故我这里用了REPLACE将“\”替换了一下,
同时这个方法不止能筛查中文,还能筛选日文,如果有其他语言就不可以用这种方法

第三种:通过CONVERT 根据类型来进行筛选

CONVERT 函数是 SQL 中的一种类型转换函数,它用于将一个数据类型转换为另一个数据类型。
CONVERT(inputstring,dest_charset,source_charset) inputstring:
要转换的字符串
dest_charset:目标字符集
source_charset:原字符集

select id,CONVERT(id,'ZHS16GBK','utf8') from HADOOP1.AAA where id <> CONVERT(id,'ZHS16GBK','utf8')

在这里插入图片描述

通过上面的可以将包含中文的字符串找出来,那如何能删除里面的中文呢

如要删除字符串中的中文可以用到正则表达式
regexp_replace(tel, ‘[^\x00-\xff]’, ‘’)

select id,regexp_replace(id, '[^\x00-\xff]', '') from HADOOP1.AAA

在这里插入图片描述

–只保留中文及小写字母

select id,regexp_replace(id, '[\u4e00-\u9fa5]', '') from HADOOP1.AAA

在这里插入图片描述
注释:这种表达需要注意字符串中如果包含小写字母,及不在这个范围内容同样可以删除,oracle正则表达式regexp_substr、regexp_like、regexp_replace是无法像其他正则表达式一样用[\u4e00-\u9fa5]来匹配中文的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源数据库Mysql_DBA运维实战 (DCL/日志)

SQL&#xff08;Structured Query Language 即结构化查询语言&#xff09; a.DDL语句 数据库定义语言&#xff1a; 数据库&#xff0c;表&#xff0c;视图&#xff0c;索引&#xff0c;存储过程&#xff0c;函数&#xff0c;创建删除ALTER(CREATE DROP ALTER) b.DML语句 数…

在Excel中将数值差距极大的两个序列用对比明显的折线图表示

在Excel中&#xff0c;如果两个数据序列的数值差距太大&#xff0c;用这样的数据序列生成折线图时&#xff0c;折线图会显得过于平缓&#xff0c;趋势对比不明显。如下图&#xff1a; 这时候只要将趋势图设置成双坐标轴&#xff0c;将其中一条趋势线绘制到次坐标轴上&#xff0…

java毕业设计-智慧食堂管理系统-内容快览

首页 智慧食堂管理系统是一种可以提高食堂运营效率的管理系统。它将前端代码使用Vue实现&#xff0c;后端使用Spring Boot实现。这个系统的目的是简化食堂管理&#xff0c;提高食堂服务质量。在现代快节奏的生活中&#xff0c;人们对餐饮服务提出了更高的要求&#xff0c;食堂管…

【Quarkus技术系列】「云原生架构体系」在云原生时代下的Java“拯救者”是Quarkus,那云原生是什么呢?

云原生时代下的Java"拯救者" 在云原生时代&#xff0c;其实Java程序是有很大的劣势的&#xff0c;以最流行的spring boot/spring cloud微服务框架为例&#xff0c;启动一个已经优化好&#xff0c;很多bean需要lazy load的application至少需要3-4秒时间&#xff0c;内…

C语言快速回顾(二)

前言 在Android音视频开发中&#xff0c;网上知识点过于零碎&#xff0c;自学起来难度非常大&#xff0c;不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》&#xff0c;结合我自己的工作学习经历&#xff0c;我准备写一个音视频系列blog。C/C是音视频必…

【Github】SourceTree技巧汇总

sourceTree登录github账户 会跳转到浏览器端 按照Git Flow 初始化仓库分支 克隆远程仓库到本地 推送变更到远程仓库 合并分支 可以看到目前的本地分支&#xff08;main、iOS_JS&#xff09;和远程分支&#xff08;origin/main、origin/HEAD、origin/iOS_JS&#xff09;目前所处…

C++多线程场景中的变量提前释放导致栈内存异常

多线程场景中的栈内存异常 在子线程中尝试使用当前函数的资源&#xff0c;是非常危险的&#xff0c;但是C支持这么做。因此C这么做可能会造成栈内存异常。 正常代码 #include <iostream> #include <thread> #include <windows.h>// 线程函数&#xff0c;用…

消防态势标绘工具,为消防基层工作助力

背景介绍 无人机测绘技术在消防领域的应用越来越普及&#xff0c;高清的二维正射影像和倾斜摄影实景三维模型能为消防态势标绘提供高质量的素材&#xff0c;消防队急需一个简便易用的、能够基于这些二三维的高清地图成果进行态势标绘的工具软件&#xff0c;使得消防“六熟悉”…

Rust 重载运算符|复数结构的“加减乘除”四则运算

复数 基本概念 复数定义 由实数部分和虚数部分所组成的数&#xff0c;形如a&#xff0b;bi 。 其中a、b为实数&#xff0c;i 为“虚数单位”&#xff0c;i -1&#xff0c;即虚数单位的平方等于-1。 a、b分别叫做复数a&#xff0b;bi的实部和虚部。 当b0时&#xff0c;a&…

(二)结构型模式:2、桥接模式(Bridge Pattern)(C++实现示例)

目录 1、桥接模式&#xff08;Bridge Pattern&#xff09;含义 2、桥接模式应用场景 3、桥接模式的UML图学习 4、C实现桥接模式的示例 1、桥接模式&#xff08;Bridge Pattern&#xff09;含义 桥接模式是一种结构型设计模式&#xff0c;它将抽象部分与实现部分分离&#…

解决ubantu驱动掉了的问题

这里写自定义目录标题 解决ubuntu驱动掉了的问题 解决ubuntu驱动掉了的问题 首先确定是否有驱动&#xff1a; ls /usr/src | grep nvidia若有&#xff0c;则大概率是驱动版本与内核版本对应不上&#xff0c;则把内核版本切换为初始版本即可。参照&#xff1a;https://blog.cs…

【小梦C嘎嘎——启航篇】string介绍以及日常使用的接口演示

【小梦C嘎嘎——启航篇】string 使用&#x1f60e; 前言&#x1f64c;C语言中的字符串标准库中的string类string 比较常使用的接口对上述函数和其他函数的测试代码演示&#xff1a; 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右…

【Spring专题】Bean的生命周期流程图

目录 前言阅读指引 流程图一、之前推测的简单流程图&#xff08;一点点参考&#xff09;*二、Bean生命周期流程图&#xff08;根据Spring源码自结&#xff09;*三、阶段源码流程图&#xff08;不断更新&#xff09; 前言 我向来不主张【通过源码】理解业务&#xff0c;因为每个…

idea报错:java: 程序包org.springframework.web.bind.annotation不存在

这个错误通常都是maven仓库的问题&#xff0c;试了网上很多方法&#xff0c;都没有解决&#xff0c;如果大家有遇到这个问题&#xff0c;且试了很多方法之后都没有解决&#xff0c;不妨可以试试我这个方法 先编译一下已经写好的代码&#xff0c;这时候会出现以上报错&#xff…

ssm基于ssm的人才招聘网站源码和论文

ssm基于ssm的人才招聘网站源码和论文020 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 选题依据&#xff08;研究的背景、目的和意义等&#xff09; 在Internet飞速发展的今天&#xff0c;互联网成为人们快…

云安全攻防(十一)之 容器编排平台面临的风险

前言 容器技术和编排管理是云原生生态的两大核心部分——前者负责执行&#xff0c;后者负责控制和管理&#xff0c;共同构成云原生技术有机体&#xff0c;我们以 Kubernetes 为例&#xff0c;对容器编排平台可能面临的风险进行分析 容器编排平台面临的风险 作为最为流行的云…

c++11 标准模板(STL)(std::basic_stringbuf)(三)

定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::allocator<CharT> > class basic_stringbuf : public std::basic_streambuf<CharT, Traits> std::basic_stringbuf…

【Git】 git push origin master Everything up-to-date报错

hello&#xff0c;我是索奇&#xff0c;可以叫我小奇 git push 出错&#xff1f;显示 Everything up-to-date 那么看看你是否提交了message 下面是提交的简单流程 git add . git commit -m "message" git push origin master 大多数伙伴是没写git commit -m "…

Rx.NET in Action 第三章学习笔记

3 C#函数式编程思想 本章内容包括 将 C# 与函数式技术相结合使用委托和 lambda 表达式使用 LINQ 查询集合 面向对象编程为程序开发提供了巨大的生产力。它将复杂的系统分解为类&#xff0c;使项目更易于管理&#xff0c;而对象则是一个个孤岛&#xff0c;你可以集中精力分别处理…

电脑屏幕闪烁?别慌!解决方法在这!

“我新买了一台电脑&#xff0c;还没用几天呢&#xff0c;就出现了电脑屏幕闪烁的情况&#xff0c;这让我感到很烦躁。有什么方法可以解决电脑屏幕闪烁的问题呢&#xff1f;” 使用电脑的过程中&#xff0c;我们不难发现电脑屏幕有时候会出现闪烁的情况&#xff0c;这会导致使用…