oracle获取字符串长度函数length()和hengthb()

lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节

length(string)计算string所占的字符长度:返回字符串的长度,单位是字符

对于单字节字符,LENGTHB和LENGTH是一样的.

如可以用length(‘string’)=lengthb(‘string’)判断字符串是否含有中文。

注:

一个汉字在Oracle数据库里占多少字节跟数据库的字符集有关,UTF8时,长度为三。

select length('cctv') from dual ;可查询汉字在Oracle数据库里占多少字节。

select length('中冶华天马') cd,length2('中冶华天马') cd2,length4('中冶华天马') cd3,lengthb('中冶华天马') b,lengthc('中冶华天马') c from dual;

length()=length2()=length4()=lengthc()<lengthb()

使用ASCII码来区分中文和其它字符,中文的ASCII码值的范围是45217~63486,根据这个来实现,我们就需要使用Oracle中的函数ASCII,用它来返回ASCII值。

这种方式可以完美区分中文字符和其它字符。

create or replace function getCustText(custName varchar2) return varchar2 is
  Result varchar2(100);
  tmp_custName varchar2(100);
  count_str number;
  i number:=1;
  str_ascii number;
  current_char varchar2(10);
begin
    select length(custName) into count_str from dual;
    while i<count_str loop
        current_char:=substr(custName,i,1);
        select ASCII(current_char) into str_ascii from dual;
        if str_ascii>45216 then
            tmp_custName:=tmp_custName||current_char;
        end if;
        i:=i+1;
    end loop;
    Result:=tmp_custName;
  return(Result);
end getCustText;

oracle数据库中 有很多的转换函数,主要有chr()、ascii()、asciistr()、cast()、chartorowid()、convert()、 rowidtochar()、to_char()、to_date()、to_number()等,其中to_char()、to_date()、 to_number()是最常见也是最常用的,chr()一般常出现在控制字符串输出的时候。本文主要总结chr()、ascii()、 asciistr()、convert()这四个转换函数:

1、chr()

chr()函数是将ASCII码转换为字符:ASCII码 -> 字符,ASCII码对应的字符可以参见本文后面的ASCII编码表。

图1:chr()示例

2、ascii()

ascii()函数是chr()的反函数,它表示将字符转换为ASCII码:字符 -> ASCII码。

图2:ascii()示例

3、asciistr()

asciistr()函数是将字符串转换为ascii字符串,如下图3:

图3:asciistr()示例

关于asciistr()函数,我在网上看到一篇文章说可以用asciistr()函数来判断一个字符串中是否含有中文字符,我看了其思路,挺有参考价值的,大概是这样的:

图4:用asciistr()函数判断一个字符串中是否含有中文字符


据上图4可以看出,如果是中文字符,那么用asciistr()转换以后,其形式是\4E2D这样的,前面有斜杠\,但是并不是所有带有\都是中文字符,
因为斜杠\本身用asciistr()转换后,其结果是\005C,也是带有\的,所以对于这个字符要特别注意下。所以,这种方法的思路就是可以先
replace掉字符串中的斜杠\,然后再用asciistr()转换,然后判断转换后的字符串中是否有斜杠\,如果有则表示存在中文字符。如果再加上循
环统计的代码,还可以用于统计出一共有多少个中文字符。

4、convert()

convert()
函数的转换是用于将字符串从一个字符集转化为另一个字符集,函数形式:convert(char, dest_char_set [,
source_char_set]),其中char表示要转换的字符串,dest_char_set表示要转换成的目的字符
集,source_char_set是char的原本字符集,如果缺省,则默认是数据库的字符集。

图5:convert()示例

有关convert()的转换思路,跟convert()相关的一些知识,可以参见博客中《收藏的一段oracle数据库中blob类型按指定编码转换为blob、clob、字符串类型的代码》这篇博文。

ORACLE获取字符串中数字部分

select translate('1212中国2323','0123456789'||'1212中国2323','0123456789') from dual;
select regexp_replace('23456中国3-00=.,45','[^0-9]') from dual;
标签:regexp_replace regexp replace oracle 正则
函数的参数说明:
一共6个参数,分别是
1、待匹配的字符串
2、正则表达式
3、替换的字符
4、标识从第几个字符开始正则表达式匹配。(默认为1)
5、标识第几个匹配组。(默认为全部都替换掉)
6、取值范围:
i:大小写不敏感;
c:大小写敏感;(默认)
n:不匹配换行符号;
m:多行模式;
x:扩展模式,忽略正则表达式中的空白字符。
可以通过REGEXP_SUBSTR函数(配合正则表达式)来实现。
举例:
sql:select regexp_substr('CYJ8-ABC','[0-9]+') from dual; 以上sql执行结果:8;
备注:
REGEXP_SUBSTR函数格式如下:
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr :需要进行正则处理的字符串
__pattern :进行匹配的正则表达式
__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)
select
( ((translate('T123','0123456789',' ')))) "字符",
( (translate('T34T56T','abc...zABCT...Z',' '))) "数字"
from dual; 一、语法:
TRANSLATE(string,from_str,to_str) 二、目的
返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。TRANSLATE 是 REPLACE 所提供的功能的一个超集。如果 from_str 比 to_str 长,那么在 from_str 中而不在 to_str 中的额外字符将从 string 中被删除,因为它们没有相应的替换字符。to_str 不能为空。Oracle 将空字符串解释为 NULL,并且如果TRANSLATE 中的任何参数为NULL,那么结果也是 NULL。 三、允许使用的位置
过程性语句和SQL语句。

oracle 字符处理的更多相关文章

  1. oracle 字符乱码问题解决方案

    今天在客户服务器上遇到了oracle中文乱码问题,第一个想到的是:要想避免oracle字符乱码的问题,需要注意oracle客户端的字符编码和服务端的字符编码保持一致. 于是操作如下: 1.查看服务端字 ...

  2. Oracle字符乱码、数据越界訪问典型Bug分析

    Oracle字符乱码.数据越界訪问典型Bug分析 前言:           作为乙方,在甲方客户那里验收阶段发现两个诡异Bug. 下面就问题来源.问题根因.解决方式.怎样避免做具体描写叙述. .且两 ...

  3. Oracle字符函数(转换大小写,替换等)

    在oracle中,有一些字符函数: upper(字符串):转换为大写lower(字符串):转换为小写initcap(字符串):首字母大写replace(字符串1,字符串2,字符串3):将串1中所有的串 ...

  4. Oracle(字符函数)

    单行函数语法: 语法:funcation_name(列 | 表达式[, 参数1, 参数2]) 单行函数主要分为以下几种: 字符函数:接收数据返回具体的字符信息 数值函数:对数字进行处理,例如:四舍五入 ...

  5. Oracle字符编码与汉字存储长度的处理

    执行如下语句,查看汉字在数据库中所占的字节: select vsize('汉') from dual; 一般情况下,得到的结果大部分为值:2 或 3 一般linux下安装oracle数据库,默认字符编 ...

  6. oracle字符乱码的解决方法

    原因分析: 客户端字符集就是为了让数据库知道我们传递过去的字符是属于哪种字符集,以便于Oracle在存储字符时进行相应的编码映射(查看客户端字符集通过查找注册表中的NLS_LANG键).在客户端查询数 ...

  7. 字符类数据类型和oracle字符类型的区别

    为兼容Oracle的数据类型,KingbaseES扩展了Oracle的NUMBER.VARCHAR2.CHAR(n)和DATE类型.该措施使得移植Oracle的Create Table等DDL语句时, ...

  8. Oracle字符分隔函数(split)

    为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...

  9. oracle字符函数

    UPPER(char) 小写转大写 LOWER(char) 大写转小写 INITCAP(char) 首字母转换 SUBSTR(char,[m[,n]]) 截取字符串函数 从源字符串char的m开始截取 ...

随机推荐

  1. MVC框架请求处理

    为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平.你的一个决定会影响团队未来的几年.要考虑方面太多: 简单易用,以提高开发效率.使小部分的精力在框架上,大部分的 ...

  2. WPF Demo8

    namespace Demo10 { public class Student { private string name; public string Name { get { return nam ...

  3. NoSQL非结构化数据库高级培训课程-大纲

    一.课程概述 本课程面向No-SQL开发人员.系统分析和系统架构师,目的在于帮助他们建立起完整的No-SQL数据库的概念,应用场景.相关开源技术框架和优缺点. 二.课程大纲 主题 时间 主题 No-S ...

  4. RDD之五:Key-Value型Transformation算子

    Transformation处理的数据为Key-Value形式的算子大致可以分为:输入分区与输出分区一对一.聚集.连接操作. 输入分区与输出分区一对一 mapValues mapValues:针对(K ...

  5. WDA编译失败问题

    1.放假回来,wda编译失败,报错如下 2018-09-25 10:03:09.020964+0800 WebDriverAgentRunner-Runner[335:33309] +[CATrans ...

  6. Java 类的生命周期

    类从被加载到JVM内存中开始,到卸载出内存为止,它的整个生命周期包括: 加载(Loading)-->验证(Verification)-->准备(Preparation)-->解析(R ...

  7. Mybatis 测试延迟加载

    在学习mybatis的延迟加载时,对 lazyLoadingEnabled 和 aggressiveLazyLoading 的区别并不理解,特别是对查询的条件不同时,执行的查询语句也不一样,所以还是测 ...

  8. linux-centos6/7初始配置

    关闭防火墙 chkconfig iptables off centos7下的命令为 systemctl stop firewalld.service #停止Firewall systemctl dis ...

  9. 使用promise对象封装一个ajaxGet函数

    function promiseAjax(url,data){        var pro = new Promise(function(success,failed){           承诺一 ...

  10. Mac OS 修改hosts文件

    这里用得是 VI 编辑器修改 打开终端(应用程序——实用工具),运行: sudo vi /etc/hosts,此时屏幕上会提示你输入密码 打开 hosts 文件之后按 i 键进入插入模式(可理解为编辑 ...