linux判断字符是否是中文,判断字段中是否含有中文字符

本文探讨了在使用ZHS16GBK字符集的SQL环境下,通过length和lengthb函数判断字符串中是否包含双字节字符的方法。第一种方法通过比较length和lengthb的值来区分,第二种方法则通过生成并匹配GBK编码范围内的所有汉字。文章还展示了如何插入和查询包含汉字的数据,并使用正则表达式检查字符串中是否存在汉字。
摘要由CSDN通过智能技术生成

本文中length代表的是字的长度,lengthb是字节的长度,字符集为ZHS16GBK。

第一种方法:不太准确,只能判断含有双字节字符

SQL> create table test (name varchar2(100));

表已创建。

SQL> insert into test values ('ABC已连接');

已创建 1 行。

SQL> insert into test values ('ABC');

已创建 1 行。

SQL> select name from test where length(name)!=lengthb(name);

NAME

--------------------------------------------------------------

ABC已连接

SQL> select name from test where length(name)=lengthb(name);

NAME

--------------------------------------------------------------

ABC

第二种方法:

gbk编码范围是4e00-9fa5

生成编码范围内的所有汉字(见附件),将每一个汉字作为一行存入表test。

SQL> select count(*) from test;

COUNT(*)

----------

20902

SQL> select min(name) from test;

MIN(NAME)

-------------------------------------------------------------------

SQL> select max(name) from test;

MAX(NAME)

-------------------------------------------------------------------

SQL> select count(*) from test where regexp_like(name, '[丂-龥]');

COUNT(*)

----------

20902

SQL> delete from test;

已删除20902行。

SQL> commit;

提交完成。

SQL> insert into test values ('abc');

已创建 1 行。

SQL> insert into test values ('a测试bc');

已创建 1 行。

SQL> insert into test values ('a测试');

已创建 1 行。

SQL> insert into test values ('测试bc');

已创建 1 行。

SQL> insert into test values ('测ab试');

已创建 1 行。

SQL> insert into test values ('测a试b');

已创建 1 行。

SQL> insert into test values ('def');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select name from test where regexp_like(name, '[丂-龥]');

NAME

----------------------------------------------------------------

a测试bc

a测试

测试bc

测ab试

测a试b

SQL> select name, regexp_instr(name, '[丂-龥]') as position from test;

NAME                       POSITION

---------------------------------------------------------------------------

abc                              0

a测试bc                      2

a测试                          2

测试bc                        1

测ab试                        1

测a试b                        1

def                               0

已选择7行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值