oracle

关注公众号 jb51net

关闭
首页 > 数据库 > oracle > ORALCE substr函数及substrb

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

作者:rogerfederer

这篇文章主要介绍了ORALCE substr函数及substrb与字符集关系,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

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

语法

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

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'.下面是一些常见的编码格式字符所占字节情况:

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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文