以下是 DB2 数据库常用函数的详细说明及示例,涵盖聚合函数、数值函数、字符串函数、日期函数、条件函数等核心类别,结合实际场景说明用法并附示例。内容基于搜索结果整理,完整函数列表请参考 DB2 官方文档。
一、聚合函数
AVG(expression)
功能:计算数值列的平均值,忽略NULL
值。
示例:sql复制SELECT AVG(PRSTAFF) FROM PROJECT WHERE DEPTNO = ‘D11’; — 计算D11部门员工的平均人数 SELECT AVG(DISTINCT SALARY) FROM EMPLOYEE; — 去重后计算平均工资COUNT(expression)
功能:统计行数,COUNT(*)
包含所有行,COUNT(column)
忽略NULL
值。
示例:sql复制SELECT COUNT(*) FROM EMPLOYEE WHERE SEX = ‘F’; — 统计女性员工总数 SELECT COUNT(DISTINCT WORKDEPT) FROM EMPLOYEE; — 统计不重复的部门数量SUM(expression)
功能:计算数值列的总和。
示例:sql复制SELECT SUM(BONUS) FROM EMPLOYEE WHERE JOB = ‘CLERK’; — 统计所有职员的奖金总和MAX/MIN(expression)
功能:返回最大/最小值。
示例:sql复制SELECT MAX(SALARY) – MIN(SALARY) FROM EMPLOYEE WHERE WORKDEPT = ‘D11’; — 计算D11部门工资极差
二、数值函数
ROUND(number, decimals)
功能:四舍五入到指定小数位。
示例:sql复制VALUES ROUND(873.726, 2); — 返回 873.73 VALUES ROUND(-745.5, -1); — 返回 -750.0(整数部分四舍五入)CEIL/CEILING(number)
与FLOOR(number)
功能:向上/向下取整。
示例:sql复制SELECT CEIL(123.45) FROM SYSIBM.SYSDUMMY1; — 返回 124 SELECT FLOOR(-123.99) FROM SYSIBM.SYSDUMMY1; — 返回 -124RAND([seed])
功能:生成 0~1 之间的随机数,可指定种子值。
示例:sql复制SELECT CAST(RAND() * 10 AS INT) FROM SYSIBM.SYSDUMMY1; — 生成 0~10 的随机整数POWER(base, exponent)
功能:计算幂次方。
示例:sql复制VALUES POWER(3, 2); — 返回 9
三、字符串函数
SUBSTR(str, start, length)
功能:截取子字符串。
示例:sql复制SELECT SUBSTR(‘Oracle Database’, 8, 8) FROM SYSIBM.SYSDUMMY1; — 返回 ‘Database’CONCAT(str1, str2)
或||
功能:拼接字符串。
示例:sql复制SELECT CONCAT(EMP_NO, ‘_’) || EMP_NAM FROM EMPLOYEE; — 拼接员工编号与姓名REPLACE(str, old_str, new_str)
功能:替换字符串中的内容。
示例:sql复制SELECT REPLACE(‘ROMANDD’, ‘NDD’, ‘CCB’) FROM SYSIBM.SYSDUMMY1; — 返回 ‘ROMACCB’
四、日期时间函数
CURRENT DATE/TIME/TIMESTAMP
功能:获取当前日期、时间或时间戳。
示例:sql复制SELECT CURRENT DATE FROM SYSIBM.SYSDUMMY1; — 返回当前日期(如 2025-02-20) VALUES CURRENT TIMESTAMP – CURRENT TIMEZONE; — 转换为 GMT 时间DATE_ADD(date, unit, value)
功能:日期加减。
示例:sql复制VALUES CURRENT DATE + 1 YEAR; — 当前日期加 1 年TIMESTAMPDIFF(unit, start, end)
功能:计算两个时间的差值。
示例:sql复制VALUES TIMESTAMPDIFF(16, CHAR(CURRENT TIMESTAMP – TIMESTAMP(‘2025-01-01’))); — 返回天数差
五、条件函数
COALESCE(value1, value2, ...)
功能:返回第一个非NULL
值。
示例:sql复制SELECT COALESCE(MGRNO, ‘ABSENT’) FROM DEPARTMENT; — 若经理编号为空,显示 ‘ABSENT’NULLIF(exp1, exp2)
功能:若两参数相等则返回NULL
,否则返回第一个参数。
示例:sql复制VALUES NULLIF(‘abc’, ‘abc’); — 返回 NULL
六、转换函数
CHAR(expression)
功能:将数值、日期等转换为字符串。
示例:sql复制SELECT CHAR(CURRENT DATE) FROM SYSIBM.SYSDUMMY1; — 返回 ‘2025-02-20’TO_NUMBER(str, format)
功能:将字符串转换为数值。
示例:sql复制VALUES TO_NUMBER(‘123.456’, ‘999.999’); — 返回 123.456
七、自定义函数示例
创建返回考试最高分学生的函数:
sql
复制
CREATE OR REPLACE FUNCTION FUNC_BEST (IN IN_EXAM_ID INT) RETURNS VARCHAR(50) BEGIN DECLARE V_STU_NAME VARCHAR(50); SELECT STUDENT_NAME INTO V_STU_NAME FROM SCORE WHERE EXAM_ID = IN_EXAM_ID ORDER BY POINT DESC FETCH FIRST 1 ROW ONLY; RETURN V_STU_NAME; END VALUES FUNC_BEST(1); -- 返回 '关云长':cite[8]
八、其他实用函数
DIGITS(number)
功能:将数值转换为固定长度的字符串(前补零)。
示例:sql复制SELECT DIGITS(123.45) FROM SYSIBM.SYSDUMMY1; — 返回 ‘000123450’HEX(number)
功能:返回数值的十六进制表示。
示例:sql复制SELECT HEX(255) FROM SYSIBM.SYSDUMMY1; — 返回 ‘FF’
注意事项
- 性能优化:避免在
WHERE
条件中对字段使用函数(如CHAR(date)
),可能导致索引失效。 - 版本兼容性:部分函数(如
LISTAGG
)需 DB2 11.1+ 支持。 - 空值处理:多数函数忽略
NULL
,使用COALESCE
或NVL
设置默认值。
THE END