ToB企服应用市场:ToB评测及商务社交产业平台

标题: ORALCE substr函数及substrb与字符集关系 [打印本页]

作者: 耶耶耶耶耶    时间: 2023-7-21 16:03
标题: 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.
  1.    SELECT SUBSTR('ABCDEFG',3,4) "Substring" FROM DUAL;
  2.   
复制代码
   以上语句返回'CDEF',即从第三个字符'C'开始,向右截取长度为4的目标字符,为'CDEF'.
 

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

3.
  1. 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值:  
  1. show parameter nls_length
复制代码
 
ORACLE字符集

   可能通过以下语句查询当前登录数据库字符集:  
  1. 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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4