DB2 数据库常用函数的详细说明及示例

套图传送门

以下是 DB2 数据库常用函数的详细说明及示例,涵盖聚合函数、数值函数、字符串函数、日期函数、条件函数等核心类别,结合实际场景说明用法并附示例。内容基于搜索结果整理,完整函数列表请参考 DB2 官方文档


一、聚合函数

  1. AVG(expression)
    功能:计算数值列的平均值,忽略 NULL 值。
    示例:sql复制SELECT AVG(PRSTAFF) FROM PROJECT WHERE DEPTNO = ‘D11’; — 计算D11部门员工的平均人数 SELECT AVG(DISTINCT SALARY) FROM EMPLOYEE; — 去重后计算平均工资
  2. COUNT(expression)
    功能:统计行数,COUNT(*) 包含所有行,COUNT(column) 忽略 NULL 值。
    示例:sql复制SELECT COUNT(*) FROM EMPLOYEE WHERE SEX = ‘F’; — 统计女性员工总数 SELECT COUNT(DISTINCT WORKDEPT) FROM EMPLOYEE; — 统计不重复的部门数量
  3. SUM(expression)
    功能:计算数值列的总和。
    示例:sql复制SELECT SUM(BONUS) FROM EMPLOYEE WHERE JOB = ‘CLERK’; — 统计所有职员的奖金总和
  4. MAX/MIN(expression)
    功能:返回最大/最小值。
    示例:sql复制SELECT MAX(SALARY) – MIN(SALARY) FROM EMPLOYEE WHERE WORKDEPT = ‘D11’; — 计算D11部门工资极差

二、数值函数

  1. ROUND(number, decimals)
    功能:四舍五入到指定小数位。
    示例:sql复制VALUES ROUND(873.726, 2); — 返回 873.73 VALUES ROUND(-745.5, -1); — 返回 -750.0(整数部分四舍五入)
  2. CEIL/CEILING(number) 与 FLOOR(number)
    功能:向上/向下取整。
    示例:sql复制SELECT CEIL(123.45) FROM SYSIBM.SYSDUMMY1; — 返回 124 SELECT FLOOR(-123.99) FROM SYSIBM.SYSDUMMY1; — 返回 -124
  3. RAND([seed])
    功能:生成 0~1 之间的随机数,可指定种子值。
    示例:sql复制SELECT CAST(RAND() * 10 AS INT) FROM SYSIBM.SYSDUMMY1; — 生成 0~10 的随机整数
  4. POWER(base, exponent)
    功能:计算幂次方。
    示例:sql复制VALUES POWER(3, 2); — 返回 9

三、字符串函数

  1. SUBSTR(str, start, length)
    功能:截取子字符串。
    示例:sql复制SELECT SUBSTR(‘Oracle Database’, 8, 8) FROM SYSIBM.SYSDUMMY1; — 返回 ‘Database’
  2. CONCAT(str1, str2) 或 ||
    功能:拼接字符串。
    示例:sql复制SELECT CONCAT(EMP_NO, ‘_’) || EMP_NAM FROM EMPLOYEE; — 拼接员工编号与姓名
  3. REPLACE(str, old_str, new_str)
    功能:替换字符串中的内容。
    示例:sql复制SELECT REPLACE(‘ROMANDD’, ‘NDD’, ‘CCB’) FROM SYSIBM.SYSDUMMY1; — 返回 ‘ROMACCB’

四、日期时间函数

  1. CURRENT DATE/TIME/TIMESTAMP
    功能:获取当前日期、时间或时间戳。
    示例:sql复制SELECT CURRENT DATE FROM SYSIBM.SYSDUMMY1; — 返回当前日期(如 2025-02-20) VALUES CURRENT TIMESTAMP – CURRENT TIMEZONE; — 转换为 GMT 时间
  2. DATE_ADD(date, unit, value)
    功能:日期加减。
    示例:sql复制VALUES CURRENT DATE + 1 YEAR; — 当前日期加 1 年
  3. TIMESTAMPDIFF(unit, start, end)
    功能:计算两个时间的差值。
    示例:sql复制VALUES TIMESTAMPDIFF(16, CHAR(CURRENT TIMESTAMP – TIMESTAMP(‘2025-01-01’))); — 返回天数差

五、条件函数

  1. COALESCE(value1, value2, ...)
    功能:返回第一个非 NULL 值。
    示例:sql复制SELECT COALESCE(MGRNO, ‘ABSENT’) FROM DEPARTMENT; — 若经理编号为空,显示 ‘ABSENT’
  2. NULLIF(exp1, exp2)
    功能:若两参数相等则返回 NULL,否则返回第一个参数。
    示例:sql复制VALUES NULLIF(‘abc’, ‘abc’); — 返回 NULL

六、转换函数

  1. CHAR(expression)
    功能:将数值、日期等转换为字符串。
    示例:sql复制SELECT CHAR(CURRENT DATE) FROM SYSIBM.SYSDUMMY1; — 返回 ‘2025-02-20’
  2. 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]

八、其他实用函数

  1. DIGITS(number)
    功能:将数值转换为固定长度的字符串(前补零)。
    示例:sql复制SELECT DIGITS(123.45) FROM SYSIBM.SYSDUMMY1; — 返回 ‘000123450’
  2. HEX(number)
    功能:返回数值的十六进制表示。
    示例:sql复制SELECT HEX(255) FROM SYSIBM.SYSDUMMY1; — 返回 ‘FF’

注意事项

  1. 性能优化:避免在 WHERE 条件中对字段使用函数(如 CHAR(date)),可能导致索引失效。
  2. 版本兼容性:部分函数(如 LISTAGG)需 DB2 11.1+ 支持。
  3. 空值处理:多数函数忽略 NULL,使用 COALESCE 或 NVL 设置默认值。
套图传送门
THE END
喜欢就支持一下吧
点赞21 分享