db2字符串函数

摘要:
可以指定可选的字符串长度单位,以指示哪些单位表示函数的起始位置和结果。使用基于字符的函数解决了将字节位置返回到字符位置的问题。代码单元16和代码单元32根据字符数计数。类似地,CODEUNITS32指定使用Unicode UTF-32来理解多字节字符的字符边界。如果使用CODEUNITS获取字符长度,则用作字符串函数输入的不同CODEUNITS将导致不同的输出。

DB2一个汉字占3个字节,Oracle占两个字节。
Oracle:
SQL> select lengthb('中') from dual;

LENGTHB('中')
-------------
2
DB2:
db2 => values length('中')

1
-----------
3


1、Locate函数
语法:LOCATE(ARG1,ARG2,<POS>)
LOCATE函数在ARG2中查找ARG1第一次出现的位置,如果指定POS,则从ARG2的POS处开始查找ARG1第一次出现的位置。
db2:
LOCATE 函数返回一个字符串在另一个字符串中第一次出现的起始位置。如果指定了可选的起始位置,则表明它是源字符串中开始进行搜索的字符位置。可以指定一个可选的字符串长度单元来指明在哪些单元中表示函数的起始位置
和结果。可以使用基于字符的函数来解决在 LOCATE 函数中指定起始位置的问题。
locate(String param1,String param2,int param3) 从param2的第param3位置开始,返回param1第一次出现的位置,默认param2为1。
db2 => values locate('a','abca',3,codeunits16)

1
-----------
4

1 条记录已选择。

POSITION 函数返回一个字符串在另一个字符串中第一次出现的起始位置。使用基于字符的函数可以解决将字节位置返回为字符位置的问题。
经测试,代码单元用octets也可以得到正确结果。
db2 => values position('中','abc1中',codeunits16)

1
-----------
5

1 条记录已选择。

Oracle:
INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)
INSTR在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索一次,就是说从字符的开始到字符的结尾就结束。
语法如下:
instr( string1, string2 [, start_position [, nth_appearance ] ] )
参数分析:
string1
源字符串,要在此字符串中查找。
string2
要在string1中查找的字符串.
start_position
代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。
nth_appearance
代表要查找第几次出现的string2. 此参数可选,如果省略,默认为 1.如果为负数系统会报错。
注意:
如果String2在String1中没有找到,instr函数返回0.
SQL> select instr('中q1abc','a',1) from dual;

INSTR('中Q1ABC','A',1)
----------------------
4

2、字符分解 substr
db2按字节数算,当遇到多字节字符时,会得出意想不到的结果。substr( string, start_position, [ length ] )
db2 => values substr('中abc',1,1)

1
-

substring(string,start_position,length,代码单元):
返回字符串的子字符串,子字符串是输入字符串的零个或多个相邻字符串长度单元。codeunits16和codeunits32代码单元按字符个数算。
db2 => values substring('中avbc',1,1,codeunits16)

1
-------

Oracle中按字符数算,截取指定起始位置的字符串。substr( string, start_position, [ length ] )
SQL> select substr('中abc',1,1) from dual;

SU
--


3、字符串长度单元 length
DB2:
使用 OCTETS 作为字符串长度单元时,通过简单地计算字符串的字节数即可确定字符串的长度。CODEUNITS16 指定将 Unicode UTF-16 用于字符语义。同样,CODEUNITS32 指定使用 Unicode UTF-32 来理解多字节字符的字符边界。
使用 CODEUNITS16 或 CODEUNITS32 计算代码单元得到的结果是相同的,除非使用了增补字符和代理对。使用增补字符时,对于一个增补字符,使用 CODEUNITS16 计算是两个 UTF-16 代码单元,而使用 CODEUNITS32 计算则是一个 UTF-32 代码单元。
如果使用 CODEUNITS 来获取字符的长度,则用作字符串函数输入的 CODEUNITS 的不同会导致输出的不同。
db2 => values CHARACTER_LENGTH('中',octets)

1
-----------
3

1 条记录已选择。
db2 => values CHARACTER_LENGTH('中',codeunits16)

1
-----------
1

1 条记录已选择。

db2 => values CHARACTER_LENGTH('中',codeunits32)

1
-----------
1

1 条记录已选择。

Oracle:
length按字符数算;lengthb按字节数算。
SQL> select length('中'),lengthb('中') from dual;

LENGTH('中') LENGTHB('中')
------------ -------------
1 2

 

4、去空格函数
LTRIM() 把字符串头部的空格去掉;
RTRIM() 把字符串尾部的空格去掉;
TRIM() 把字符串头和尾部的空格去掉。

5、大小写转换函数
LOWER()将字符串全部转为小写;
UPPER()将字符串全部转为大写。

6、ascii()
返回字符表达式最左端字符的ASCII 码值。

7、char()
db2中将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。

8、连接字符串
db2:
select 'a'||'b' from sysibm.sysdummy1
Oracle:
select 'a'||'b' from dual
sqlserver:
select 'a'+ 'b'

9、替换函数 DB2中认为''和null不同
db2:value函数
db2 => values value(null,'a')--结果为a
db2 => values value('','a')--结果为空
Oracle:
nvl(par1,par2)--Oracle中null或''都代表为空
Sqlserver:
isnull(par1,par2)

10、返回参数集中第一个非null参数
values coalesce(null,null,'1')

11、LCASE、LOWER函数
语法:LCASE()、LOWER()
返回定长、变长字符串的小写形式

12、UCASE、UPPER函数返回定长、变长字符串的大写形式。

13、时间类型转换为字符类型
db2:
SELECT varchar(current timestamp) from sysibm.sysdummy1
Oracle:
ELECT to_char(sysdate,yyyy-mm-dd hh24:mi:ss) from dual
sqlserver:
SELECT convert(varchar,getdate(),20)

14、db2的case when else
select case g.master_type
when 'system' then
'管理员'
when 'roletype' then
'特殊角色'
else
'普通用户'
end AS caseConvert
From global_code g;

15、DB2数据类型改变函数:varchar()、int()、date()、time()等
SQL Server: SELECT convert(varchar,getdate(),20)
Oracle:SELECT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual
DB2: SELECT varchar(current timestamp) from sysibm.sysdummy1

16、取前几条记录
SQL Server: Select top n * from xtable
Oracle:Select * from xtable where rownum <=n
DB2:select * from syscat.tables fetch first 10 rows only

17、repeat函数
语法:repeat(parm,int z)
将parm重复z次后输出
select repeat('a',10) from sysibm.sysdummy1;

18、replace函数
语法:REPLACE(EXP1,EXP2,EXP3)
REPLACE函数用EXP3代替EXP1中所有的EXP2。
db2 => select replace('abcde','bc','oo') from sysibm.sysdummy1

1
-----
aoode

19、REPEAT函数
语法:REPEAT(ARG1,NUM_TIMES)
REPEAT函数返回ARG1被重复NUM_TIMES次的字符串。
eg:
SELECT REPEAT(NAME,2) FROM T1

20、POSSTR函数
语法:POSSTR(EXP1,EXP2)
POSSTR函数返回EXP2在EXP1中第一次出现的位置。
db2 => select posstr('abca','a') from sysibm.sysdummy1

1
-----------
1

21、INSERT函数
语法:INSERT(ARG1,POS,SIZE,ARG2)
INSERT函数返回一个字符串,将ARG1从POS处删除SIZE个字符,将ARG2插入该位置。
这里的pos是按字节数算的。如果转化成按字符数算,可以改写成:INSERT(ARG1,POS,SIZE,ARG2,CODEUNITS16)
db2 => select insert('abcde',2,2,'中') from sysibm.sysdummy1

1
--------
a中de

22、CONCAT函数 等价于 ||
语法:CONCAT(ARG1,ARG2)
CONCAT函数返回两个字符串的连接。
db2 => select concat('a','b') from sysibm.sysdummy1

1
--
ab

23、LEFT、RIGHT函数
语法:LEFT(ARG,LENGTH)、RIGHT(ARG,LENGTH)
LEFT、RIGHT函数返回ARG最左边、右边的LENGTH个字符串,ARG可以是CHAR或BINARY STRING。
这两个函数的length参数是按字节数算。如果想转化成按字符数算,可以改写成LEFT(ARG,LENGTH,CODEUNITS16)
db2 => select left('abcd',3),right('abcd',2) from sysibm.sysdummy1

1 2
---- ----
abc cd

24、LTRIM、RTRIM函数
语法:LTRIM()、RTRIM()
LTRIM、RTRIM函数从CHAR、VARCHAR、GRAPHIC或者VARGRAPHIC中去掉左侧或右侧的空格。

这个语法和Oracle一样。

免责声明:文章转载自《db2字符串函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用AutoHotKey提升工作效率极验验证码破解之selenium下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

001python基础

1、Python源码的头文件中要声明编码方式 例如:按照UTF-8编码读取源代码 #coding=utf-8#coding:utf-8#-*- coding:utf-8 -*- 2、命令行与python交互模式 2.1 在windows开始菜单选择“命令提示符”,就进入到命令行模式2.2 在命令行模式下敲命令python,然后就进入到python交互模式2...

htm字符串生成器

因为程序是在Ubuntu上写的,如果在Windows上使用,需要略加改动。由于发现了更好的导出到Excel的方法,这个程序暂时不做windows版了。大家可以看《html字符串生成器源代码》。 先把要转化的.xls文件另存为.html文件,然后再用html字符串生成器转化。 为了实现C#导出到Excel,我选用了生成htm字符串的方式,用StringBui...

批处理命令学习(一)

批处理语法 扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。 ==== 注 =======================================.bat是dos下的批处理文件.cmd是nt内核命令行环境的另一种批处理文件从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释...

简道云--公式与函数的使用教程

公式与函数 在制作表单时,可以设置控件与控件之间的数据联动关系。给例如编辑完单价和数量后,自动计算总价等这样的业务场景提供了支撑。 公式面板左侧可以选择当前表单控件所对应的值,以及所有表单控件所对应的字段名。被选择后,在公式面板中会以反引号包裹的形式显示。 注意:函数在简道云里的设置是大写,即在运用函数的时候,请用纯大写字母。 表单控件与其返回值的数据类型...

模板jinja2常用方法

数学运算       +, -, *, /, **, //, %等数学运算符都支持. 逻辑运算       and, or, not也同样支持 1.   in 判断元素是否在集合中 2.   | 管道操作符, 默认使用Apply调用一个方法 3.   ~  字符串连接 4    ()  调用可调用对象 5.   . 和 [ ]获取属性 6.   三元操作:...

SQL 字符串处理函数大全

     select语句中只能使用sql函数对字段进行操作(链接sql server),select 字段1 from 表1 where 字段1.IndexOf("云")=1;这条语句不对的原因是indexof()函数不是sql函数,改成sql对应的函数就可以了。left()是sql函数。select 字段1 from 表1 where charinde...