ORALCE substr函数及substrb与字符集关系详解

 更新时间:2023年07月22日 09:03:27   作者:rogerfederer  
这篇文章主要介绍了ORALCE substr函数及substrb与字符集关系,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

ORALCE substr函数及substrb与字符集关系

语法

函数用途: SUBSTR函数用来截取从源字符(参数 char)中截取一部分目标字符,截取方式为限定从源字符截取起始位置(参数 positon),并限定截取目标字符长度(参数 substring_length)。substr系列函数计算目标字符长度及开始截取字符位置长度的方式有所不同——substr函数为字符,substrb为字节,substrc为UNICODE完全字符集,substr2为UCS2编码代码点,substr4为ucs4编码代码点。

  • 参数position为0时,按1处理。
  • 参数position为正数时,ORACLE数所库查询时从左到右从第一个字符开始计数。
  • 参数position 为负数时,查询从右向左从倒数第一个字符开始计数。
  • 参数substring_length可为空,为空时直接从position位置开始向后截取所有字符(含position位置字符)。哪果substring为负值 ,则substr函数返还null。

char参数类型可以是 char,varchar2,nchar,nvarchar2,clob或者nclob,但除substr与substrb函数外,另外三个substr系列函数的参数char类型不允许 为CLOB(character large object) 或者NCLOB类型。position与substringlength参数数据类型必须是number数值型,或者可以被隐式转换为number型的数据类型,并且最终最必须可以被转换为整型。返回值的类型一般与char参数的数据类型一致,但char、nchar类型的参数返回值实际上分别为varchar2 、nvarchar2类型.position与substringlength参数如果为浮点型数据则被直接自动处理为整型数据。

示例:  

1.

SELECT SUBSTR('ABCDEFG',3,4) "Substring" FROM DUAL;

以上语句返回'CDEF',即从第三个字符'C'开始,向右截取长度为4的目标字符,为'CDEF'.

2.

SELECT SUBSTR('ABCDEFG',-5,4) "Substring" FROM DUAL;

以上语句返回'CDEF',即从倒数第五个字符'C'开始,向右截取长度为4的目标字符,为'CDEF'.此处position参数为负值值是起始位置计算从右向左,但截取方向依然为从左向右,而instr(string,substring,position,occurence)函数position参数为负值 时,不仅取起始位置是从右向左,并且匹配计算目标字符串出现次数方向也是从右向左。

3.

SELECT SUBSTRB('ABCDEFG',5,4.2) "Substring with bytes" FROM DUAL;  

substrb函数与substr函数不同之处在于它以字节来计数,而substr函数仅单纯以字符来计算,不论是中文还是英文。因此,由于数据库系统字符集编码方式的不一致,不同数据库系统执行上述语句结果可能有所不同。例3示例语句在GBK字符集下,字母占1字节,因此返还值为'EFG',即从第5个字节'E'开始,向右截取4个字节(不满4个截到末尾即可);而如果是UNICODE字符集,中英文均占2字节,因此返还值为'CD'.下面是一些常见的编码格式字符所占字节情况:

  • 1、ASII:美国标准信息交换码,用一个字节的7位可以表示。无汉字字符,一个字母对应一个字节。;
  • 2、ISO8859-1:拉丁码表,欧洲码表,用一个字节的8位可以表示;
  • 3、GBK2312:中国的中文编码表,最多两个字节编码所有字符。一个汉字2字节,一个字母1字节;
  • 4、GBK:中国的中文编码表升级,融合了更多的中文文字字符,最多两个字节编码。一个汉字2字节,一个字母1字节;
  • 5、Unicode:国际标准码,融合了目前人类使用的所有字符,为每个字符分配唯一的字符码,所有的文字都用两个字节来表示;
  • 6、utf-8:变长的编码方式,可用1-4个字节来表示一个字符。现在最多的又有6个字节。一个汉字3字节,一个字母1字节; -7、utf-16:中文和字母都是占2个字节。 -8、utf-32:中文和字母都是占4个字节。

ORACLE字符串存储方式

ORACLE数据库中varchar2类型字符串有varchar2(n char) 和varchar2(n byte)两种存放方式。一般直接定义为varchar2(n),这样ORALCE会根据配置文件中的设置选择以字节还是以字符为单位。查看具体是以哪种方式可能在PLSQL命令行输入以下命令查看value值:

show parameter nls_length

ORACLE字符集

可能通过以下语句查询当前登录数据库字符集:

elect userenv('language') from dual;

   ORACLE的字符存储方式与字符集共同决定了一个varchar2型字段能存储什么长度什么形式的字符,比如:一个varchar2(4)长度的字段,如果 采用的是GBK编码方式,即一个汉字占2字节,字母占1字节,且存储方式为byte,则此字段最多存储2汉字,4字母。

参考文档

ORALCE官网 SQL Language Reference:

https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/About-SQL-Functions.html#GUID-D51AB228-518C-4213-8BD4-F919623D105E

到此这篇关于ORALCE substr函数及substrb与字符集关系的文章就介绍到这了,更多相关ORALCE substr函数及substrb内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详细聊聊Oracle表碎片对性能有多大的影响

    详细聊聊Oracle表碎片对性能有多大的影响

    当针对一个表的删除操作很多时,表会产生大量碎片,下面这篇文章主要给大家介绍了关于Oracle表碎片对性能影响的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • Oracle查看表空间使用率以及爆满解决方案详解

    Oracle查看表空间使用率以及爆满解决方案详解

    在日常的oralce使用中最长遇到的问题就是oralce的表空间满了,数据无法写入报错,下面这篇文章主要给大家介绍了关于Oracle查看表空间使用率以及爆满解决的相关资料,需要的朋友可以参考下
    2022-07-07
  • Oracle DBA常用语句

    Oracle DBA常用语句

    Oracle DBA常用语句,对于表空间大小等查看都是不错的sql语句。
    2009-08-08
  • Oracle 多参数查询语句

    Oracle 多参数查询语句

    这篇文章主要介绍了Oracle 多参数查询语句 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • oracle如何解锁封锁的账号

    oracle如何解锁封锁的账号

    今天小编就为大家分享一篇关于oracle如何解锁封锁的账号,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Oracle数据库中的LISTAGG函数使用示例及注意事项

    Oracle数据库中的LISTAGG函数使用示例及注意事项

    这篇文章主要给大家介绍了关于Oracle数据库中LISTAGG函数使用示例及注意事项的相关资料,listagg函数是Oracle 11.2推出的新特性,其主要功能类似于wmsys.wm_concat函数,即将数据分组后把指定列的数据再通过指定符号合并,需要的朋友可以参考下
    2024-08-08
  • oracle中to_date详细用法示例(oracle日期格式转换)

    oracle中to_date详细用法示例(oracle日期格式转换)

    这篇文章主要介绍了oracle中to_date详细用法示例,包括期和字符转换函数用法、字符串和时间互转、求某天是星期几、两个日期间的天数、月份差等用法
    2014-01-01
  • expdp  中ORA-39002、ORA-39070错误详解及解决办法

    expdp 中ORA-39002、ORA-39070错误详解及解决办法

    这篇文章主要介绍了expdp 中ORA-39002、ORA-39070错误详解及解决办法的相关资料,需要的朋友可以参考下
    2017-02-02
  • Oracle 10g利用amdu抽取数据文件的方法教程

    Oracle 10g利用amdu抽取数据文件的方法教程

    这篇文章主要给大家介绍了关于Oracle 10g利用amdu抽取数据文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Oracle学习笔记之视图及索引的使用

    Oracle学习笔记之视图及索引的使用

    这篇文章主要介绍了Oracle学习笔记之视图及索引的使用,视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询
    2022-07-07

最新评论