参考:
DB2 9 中基于字符的字符串函数
DB2 9 for Linux, UNIX, and Windows 的字符串单元分别为 OCTETS、CODEUNITS16 和 CODEUNITS32。
对于单字节字符编码模式,一个字节组成一个字符,单字节字符串的长度与字符串的字节长度相同。对于图形字符串,两个字节组成一个字符,使用双字节数来表示字符串的长度。但是对于多字节编码,字符的字节长度随使用编码模式的不同而不同,每个字符的长度可能是一个字节或多个字节。
一个汉字在DB2中占3个字节
values length('我')
---------------------
3
字符串函数拥有数值规范,或者说结果是输入数据相关的数值。字符串长度单元属于数值。待执行的字符串操作可能导致不同的输出,取决于计算字符所使用的字符串长度单元。一些函数的输入是数值,比如字符串函数的起始、长度和偏移量参数。而其他一些函数的返回结果是数值,比如搜索字符串中指定的子字符串的出现位置,首先执行搜索然后结果返回为字符串长度单元中隐式或显式指定的数字。
使用 OCTETS 作为字符串长度单元时,通过简单地计算字符串的字节数即可确定字符串的长度。CODEUNITS16 指定将 Unicode UTF-16 用于字符语义。同样,CODEUNITS32 指定使用 Unicode UTF-32 来理解多字节字符的字符边界。
如果使用 CODEUNITS 来获取字符的长度,则用作字符串函数输入的 CODEUNITS 参数的不同会导致输出的不同。
--计算汉字的长度
values length('我',octets)
-----------------------
3
values length('我',codeunits16)
-----------------------
1
values length('我',codeunits32)
-----------------------
1
---求汉字的子字符串
--子字符串‘中国’
values substring('我爱你中国',4,2,codeunits16),从第四个汉字开始,往后去三个汉字。
--------------------
中国
还有字符处理函数:substr,locate。