oracle u4e00 u9fa5,Oracle 判断汉字 [\u4e00-\u9fa5]
最近由于单位提了一个需求,要判断提供的用户名称里不有全角字符,至少有两个汉字。找了半天,想通过正则表达式来解决,但测试了好久才发现,Oracle的正则函数REGEXP_LIKE 不支持“\un 匹配 n,其中 n 是以四位十六进制数表示的 Unicode 字符”的判断,例如,\u00A9 匹配版权符号 (©,而标准的正则是可以支持的,所以这个办法行不通,只能过期其他办法来实现。
在网上找了半天,都没有确切的实现办法,有通过Length()和lengthb ()来判断,但不完美,所以就把自己的写法记录下来希望能有用处。
对于全角字符,ascii值的范围是\uFF00-\uFFFF,都是FF段的,所以可以通过转换成ascii 来判断,instr(asciistr(replace( '在《<23\', '\')),'\FF',1,1) > 0 就可以实现对于汉字,范围太大,只能通过函数来完成,于是写了如下函数:
create or replace function get_chinese(v_name in varchar2) return integer is
i int;
v_count integer;
v_code varchar2(10);
begin
v_count := 0;
/**
用途: 返回字符串中汉字的个数
原理说明: 因为汉字的ASCII码值在4E00和9FA5之间,所以,可以将字符串转为ASCII后,判断连续的5位是否在这个范围,
是则为汉字,否则为其他字符。
返回值: 汉字个数
异常返回: -1
*/
for i in 1 .. lengthb(asciistr(v_name)) - 4 loop
--if substr(asciistr(v_name),i,1)='\' then --有\则判断是否汉字
v_code := substr(asciistr(v_name), i, 5);
IF V_CODE BETWEEN '\4E00' AND '\9FA5' THEN
--汉字的asciid码值范围
v_count := v_count + 1; --有一个汉字
end if;
-- dbms_output.put_line(v_code);
-- end if;
end loop;
return v_count;
exception
when others then
return - 1; --异常返回-1
end get_chinese;
查询结果:
还可以使用正则表达式判断非中文汉字字符:
select 字段 from 表名
where regexp_like(字段 , '[^' || unistr('\4e00') || '-' || unistr('\9fa5') || ']');
来源:oschina
链接:https://my.oschina.net/u/163737/blog/525389
oracle u4e00 u9fa5,Oracle 判断汉字 [\u4e00-\u9fa5]相关推荐
- oracle insert汉字出错,Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名...
本文主要向大家介绍了Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. Oracle数据库,用 ...
- oracle删除判断是否存在,oracle创建表之前判断表是否存在,如果存在则删除已有表...
Mysql 创建表之前判断表是否存在,如果存在则删除已有表 DROP TABLE IF EXISTS sys_area; CREATE TABLE sys_area ( id varchar(64) ...
- oracle创建表之前判断表是否存在,如果存在则删除已有表
Mysql 创建表之前判断表是否存在,如果存在则删除已有表 DROP TABLE IF EXISTS sys_area;CREATE TABLE sys_area (id int NOT NULL A ...
- oracle去除字段里的汉字
oracle去除字段里的汉字 数据库中某些字段过长,无法导入另一个库,现在规范数据格式 查询 '单位电话' 字段的长度大于15的: select 单位电话 from 库 t where length( ...
- oracle 判断表存在建表,oracle创建表之前判断表是否存在,如果存在则删除已有表...
oracle创建表之前判断表是否存在,如果存在则删除已有表 在sqlserver中,有if exit()这样的语句,但是在oracle中却没有.如果直接使用drop table那么如果表不存在会报错, ...
- oracle触发器判断空值,oracle触发器加条件判断、dblink
--新增基站同步给电池组信息 create or replace trigger a_b_test after insert or update or delete on BJLT.BASESTATI ...
- oracle中字段长度与汉字,Oracle存储汉字字段长度
我们Oracle系统当中如果备注字段要输入200个汉字,则该字段要么设置成varchar2(600):或者nvarchar2(200). 下面提供参考,针对Oracle设置备注字段保存汉字长度问题. ...
- oracle时间判断上下午,oracle查询时间的判断
oracle查询时间的判断 关键字: oracle查询时间的判断 查询一个语句想知道这次查询用了多少时间 时间可以精确到1/1000000秒,我一直使用下面的方法: CREATE OR REP ...
- oracle if中过程判断,oracle的if判断语句
ORACLE中触发器的判断IF语句 加一行 NULL 即可 例如: SQL> DECLARE 2 testvalue INT; 3 BEGIN 4 testvalue := 200; 5 6 I ...
最新文章
- python保存模型与参数_如何导出python中的模型参数
- PLSQL_性能优化系列17_Oracle Merge Into和Update更新效率
- POJ 2336 Ferry Loading II 动态规划
- TMS320F28335之定时器
- Linux 下的tar常用命令及操作
- 使用机器学习预测天气_如何使用机器学习预测着陆
- PWN题[强网先锋]no_output
- 案例:演示pageContext对象的使用及源码分析获取属性方法
- ecshop商品下面显示销售量
- Python进阶全系列
- 数据库索引与视图实验
- 如何旋转PDF文件页面,一分钟教你学会
- 输入192.168.1.1登陆页面打不开怎么办
- 【一起入门NLP】中科院自然语言处理期末考试*总复习*:考前押题+考后题目回忆
- echart 折线图 ---- 坐标轴、网格、折线配置
- 无法确认设备和计算机之间的连接打印机,我无法从计算机上通过USB 进行打印...
- yylabel html富文本,YYLabel 自动布局 富文本文字点击事件
- h5+js调取相机做取景框_使用Vue.js开发微信小程序:开源框架mpvue解析
- 天然气井站远程监控解决方案
- 【项目源码】智慧班牌源码 家校互联小程序源码 智慧校园云平台
热门文章
- Unity5 Space Shooter基础部分开发笔记
- Flutter实战一Flutter聊天应用(十四)
- 中国松紧带市场趋势报告、技术动态创新及市场预测
- 中国晶体谐振器行业市场供需与战略研究报告
- eclipse调试第一个java程序
- 新年第一份“欧气”,“中国开发者大调查”第五批中奖名单出炉啦
- 漫画 | 程序员联名把产品经理告上县衙,并列了8大罪状(下)
- 做开源 18 年,他想把中国开源带向世界 | 人物志
- HarmonyOS 2.0:正式开源,年底面向开发者发布智能手机 Beta 版本
- 华为云发布 GaussDB(DWS) 实时数仓,技术创新释放行业数据价值