DB2数据库常用的函数总结

时间:2025-03-23 09:31:46

(1)listagg函数实现行转列:listagg() within group()。

listagg(column_a,seperator) within group(order by column_b):column_a为列字段,separator即为分隔符,column_b即为排序的字段。

例如:

SELECT
	DEPT_ID ,
	listagg( ,',') 
    WITHIN GROUP 
    (ORDER BY ) NAMES
FROM
	SYS_USER su
WHERE
	ORGAN_ID = '17000'
GROUP BY
	DEPT_ID ;

(2)decode函数:条件判断时的函数。

decode(value,if1,then1,if2,then2...ifn,thenn,else):value为if1时,结果为then1,value为if2时,结果为then2,value为ifn时,结果为thenn,当value不等于任何给出的值时,则为else。decode函数可用case when函数来替代。

SELECT DECODE(SEX,'0','male','1','female','') FROM SYS_USER su ;

SELECT CASE WHEN SEX = '0' THEN 'male' WHEN SEX = '1' THEN  'female' ELSE '' END FROM SYS_USER su ;

(3)instr函数:

instr(sourceString,targetString,start,matched):第一个参数(sourceString)是被检索字符串,第二个参数(targetString)是检索字符串,第三个参数(start)是检索开始的位置,第四个参数(matched)是要找到的第几个的序号。instr返回的是检索字符串位置的函数,检索不到返回0。

#查询目标字符串在指定字符串中出现的位置
SELECT INSTR('ceshishuju','u',1,2) FROM SYS_USER su WHERE USERNAME = 'admin';

#解决in返回结果集顺序
SELECT * FROM SYS_USER su WHERE USERNAME IN('admin','001','002','003') ORDER BY INSTR('admin,001,002,003',USERNAME) ;

(4)substr函数:

substr(string,startPosition,length):表示截取字符串string从startPosition位置开始的length个字符,如果没有指定length,则返回剩余的字符。

#结果为:eshi
SELECT SUBSTR('ceshi',1,3) FROM SYS_USER su WHERE USERNAME = 'admin';

#结果为:ceshi
SELECT SUBSTR('ceshi',1) FROM SYS_USER su WHERE USERNAME = 'admin';

(5)locate函数:

locate(string1,string2,position):表示在string2中找到string1第一次出现的位置,position是指从哪个位置开始查找(没有则,从表示从开始查找)。如果string1不为null且查找不到的话返回0,如果找到则返回大于0的数字。

SELECT LOCATE(USERNAME,'ceshi admin') FROM SYS_USER su WHERE USERNAME = 'admin';