最近由于单位提了一个需求,要判断提供的用户名称里不有全角字符,至少有两个汉字。找了半天,想通过正则表达式来解决,但测试了好久才发现,Oracle的正则函数REGEXP_LIKE 不支持“\un 匹配 n,其中 n 是以四位十六进制数表示的 Unicode 字符”的判断,例如,\u00A9 匹配版权符号 (&copy,而标准的正则是可以支持的,所以这个办法行不通,只能过期其他办法来实现。

在网上找了半天,都没有确切的实现办法,有通过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]相关推荐

  1. oracle insert汉字出错,Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名...

    本文主要向大家介绍了Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. Oracle数据库,用 ...

  2. oracle删除判断是否存在,oracle创建表之前判断表是否存在,如果存在则删除已有表...

    Mysql 创建表之前判断表是否存在,如果存在则删除已有表 DROP TABLE IF EXISTS sys_area; CREATE TABLE sys_area ( id varchar(64) ...

  3. oracle创建表之前判断表是否存在,如果存在则删除已有表

    Mysql 创建表之前判断表是否存在,如果存在则删除已有表 DROP TABLE IF EXISTS sys_area;CREATE TABLE sys_area (id int NOT NULL A ...

  4. oracle去除字段里的汉字

    oracle去除字段里的汉字 数据库中某些字段过长,无法导入另一个库,现在规范数据格式 查询 '单位电话' 字段的长度大于15的: select 单位电话 from 库 t where length( ...

  5. oracle 判断表存在建表,oracle创建表之前判断表是否存在,如果存在则删除已有表...

    oracle创建表之前判断表是否存在,如果存在则删除已有表 在sqlserver中,有if exit()这样的语句,但是在oracle中却没有.如果直接使用drop table那么如果表不存在会报错, ...

  6. oracle触发器判断空值,oracle触发器加条件判断、dblink

    --新增基站同步给电池组信息 create or replace trigger a_b_test after insert or update or delete on BJLT.BASESTATI ...

  7. oracle中字段长度与汉字,Oracle存储汉字字段长度

    我们Oracle系统当中如果备注字段要输入200个汉字,则该字段要么设置成varchar2(600):或者nvarchar2(200). 下面提供参考,针对Oracle设置备注字段保存汉字长度问题. ...

  8. oracle时间判断上下午,oracle查询时间的判断

    oracle查询时间的判断 关键字: oracle查询时间的判断 查询一个语句想知道这次查询用了多少时间 时间可以精确到1/1000000秒,我一直使用下面的方法: CREATE   OR   REP ...

  9. oracle if中过程判断,oracle的if判断语句

    ORACLE中触发器的判断IF语句 加一行 NULL 即可 例如: SQL> DECLARE 2 testvalue INT; 3 BEGIN 4 testvalue := 200; 5 6 I ...

最新文章

  1. python保存模型与参数_如何导出python中的模型参数
  2. PLSQL_性能优化系列17_Oracle Merge Into和Update更新效率
  3. POJ 2336 Ferry Loading II 动态规划
  4. TMS320F28335之定时器
  5. Linux 下的tar常用命令及操作
  6. 使用机器学习预测天气_如何使用机器学习预测着陆
  7. PWN题[强网先锋]no_output
  8. 案例:演示pageContext对象的使用及源码分析获取属性方法
  9. ecshop商品下面显示销售量
  10. Python进阶全系列
  11. 数据库索引与视图实验
  12. 如何旋转PDF文件页面,一分钟教你学会
  13. 输入192.168.1.1登陆页面打不开怎么办
  14. 【一起入门NLP】中科院自然语言处理期末考试*总复习*:考前押题+考后题目回忆
  15. echart 折线图 ---- 坐标轴、网格、折线配置
  16. 无法确认设备和计算机之间的连接打印机,我无法从计算机上通过USB 进行打印...
  17. yylabel html富文本,YYLabel 自动布局 富文本文字点击事件
  18. h5+js调取相机做取景框_使用Vue.js开发微信小程序:开源框架mpvue解析
  19. 天然气井站远程监控解决方案
  20. 【项目源码】智慧班牌源码 家校互联小程序源码 智慧校园云平台

热门文章

  1. Unity5 Space Shooter基础部分开发笔记
  2. Flutter实战一Flutter聊天应用(十四)
  3. 中国松紧带市场趋势报告、技术动态创新及市场预测
  4. 中国晶体谐振器行业市场供需与战略研究报告
  5. eclipse调试第一个java程序
  6. 新年第一份“欧气”,“中国开发者大调查”第五批中奖名单出炉啦
  7. 漫画 | 程序员联名把产品经理告上县衙,并列了8大罪状(下)
  8. 做开源 18 年,他想把中国开源带向世界 | 人物志
  9. HarmonyOS 2.0:正式开源,年底面向开发者发布智能手机 Beta 版本
  10. 华为云发布 GaussDB(DWS) 实时数仓,技术创新释放行业数据价值