SQL 常用函数速查手册(Oracle)

前言

SQL 提供了丰富的内置函数,用于处理字符串、数值、日期等数据。以下整理了一些最常用的函数,附带示例说明。


字符串函数

函数 说明 示例 结果
LENGTH(str) 返回字符串的字符数 SELECT LENGTH('克峰同学') FROM dual; 4
LENGTHB(str) 返回字符串的字节数(UTF-8 编码) SELECT LENGTHB('克峰同学') FROM dual; 12(注1)
CONCAT(str1, str2) 拼接两个字符串 SELECT CONCAT('Hello', ' ', 'World') Hello World
UPPER(str) 将字符串转换为大写 SELECT UPPER('sql') SQL
LOWER(str) 将字符串转换为小写 SELECT LOWER('SQL') sql
SUBSTR(str, pos, len) 从指定位置截取子串 SELECT SUBSTR('abcdef', 2, 3) bcd
INSTR(str, substr) 返回子串第一次出现的位置 SELECT INSTR('hello world', 'world') 7
TRIM([LEADING/TRAILING] char FROM str) 去除字符串首尾指定字符 SELECT TRIM(' abc ') abc
REPLACE(str, old, new) 替换字符串中的子串 SELECT REPLACE('abc abc', 'abc', 'xyz') ``

注1:LENGTHB 的字节数取决于数据库字符集。在 AL32UTF8 字符集下,一个汉字通常占 3 个字节;若为 GBK 或 ZHS16GBK,则占 2 个字节。示例中若返回 12,表示每个汉字 3 字节。若你的数据库使用 GBK,可能返回 8。


数值函数

函数 说明 示例 结果
CEIL(n) 向上取整 SELECT CEIL(13.5) FROM dual; 14
FLOOR(n) 向下取整 SELECT FLOOR(13.5) FROM dual; 13
ROUND(n, d) 四舍五入,d 为小数位数 SELECT ROUND(13.567, 2) FROM dual; 13.57
TRUNC(n, d) 截断小数位,不四舍五入 SELECT TRUNC(13.567, 2) FROM dual; 13.56
MOD(m, n) 返回 m 除以 n 的余数 SELECT MOD(10, 3) FROM dual; 1
ABS(n) 返回绝对值 SELECT ABS(-5) FROM dual; 5
POWER(m, n) 返回 m 的 n 次幂 SELECT POWER(2, 3) FROM dual; 8
SQRT(n) 返回平方根 SELECT SQRT(16) FROM dual; 4

日期函数

函数 说明 示例 结果
SYSDATE 返回当前日期时间 SELECT SYSDATE FROM dual; 2025-03-15 10:30:45
CURRENT_DATE 返回当前日期(会话时区) SELECT CURRENT_DATE FROM dual; 2025-03-15
EXTRACT(part FROM date) 提取日期的某部分(年、月等) SELECT EXTRACT(YEAR FROM SYSDATE) FROM dual; 2025
TO_DATE(char, format) 将字符串转换为日期 SELECT TO_DATE('2025-03-15', 'YYYY-MM-DD') FROM dual; 2025-03-15
TO_CHAR(date, format) 将日期格式化为字符串 SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM dual; 2025-03-15 10:30:45
MONTHS_BETWEEN(date1, date2) 返回两个日期相差的月数 SELECT MONTHS_BETWEEN('2025-03-15','2025-01-15') FROM dual; 2
ADD_MONTHS(date, n) 给日期增加 n 个月 SELECT ADD_MONTHS('2025-03-15', 3) FROM dual; 2025-06-15
NEXT_DAY(date, '星期X') 返回指定日期之后的第一个星期几 SELECT NEXT_DAY(SYSDATE, '星期五') FROM dual; 2025-03-21
LAST_DAY(date) 返回月份的最后一天 SELECT LAST_DAY('2025-02-01') FROM dual; 2025-02-28

转换函数

函数 说明 示例 结果
TO_NUMBER(char) 将字符串转换为数字 SELECT TO_NUMBER('123.45') FROM dual; 123.45
TO_CHAR(number, format) 将数字格式化为字符串 SELECT TO_CHAR(12345.67, '999G999D99') FROM dual; 12,345.67
CAST(expr AS type) 将一个数据类型转换为另一个 SELECT CAST('123' AS INTEGER) FROM dual; 123

聚合函数(用于分组统计)

函数 说明 示例(假设有一张员工表 emp 结果
COUNT(*) 统计行数 SELECT COUNT(*) FROM emp; 总行数
SUM(col) 求和 SELECT SUM(salary) FROM emp; 工资总和
AVG(col) 求平均值 SELECT AVG(salary) FROM emp; 平均工资
MAX(col) 求最大值 SELECT MAX(salary) FROM emp; 最高工资
MIN(col) 求最小值 SELECT MIN(salary) FROM emp; 最低工资

条件判断函数

函数 说明 示例 结果
CASE WHEN ... THEN ... ELSE END 条件分支 SELECT CASE WHEN 1>0 THEN '真' ELSE '假' END FROM dual;
DECODE(expr, search1, result1, ...) Oracle 特有的条件判断(类似 CASE) SELECT DECODE(2, 1, '一', 2, '二', '其他') FROM dual;
COALESCE(expr1, expr2, ...) 返回第一个非空表达式 SELECT COALESCE(NULL, NULL, '非空', '默认') FROM dual; 非空
NULLIF(expr1, expr2) 相等则返回 NULL,否则返回 expr1 SELECT NULLIF('A', 'B') FROM dual;

注意事项

  • 函数名不区分大小写,但为清晰通常大写。
  • 不同数据库(Oracle、MySQL、SQL Server)的函数名称和用法可能略有差异,请根据实际环境查阅对应文档。
  • 示例中的 FROM dual 是 Oracle 特有的虚拟表;其他数据库可能无需或使用其他方式(如 MySQL 可省略)。
posted @ 2024-06-04 16:39  克峰同学  阅读(41)  评论(0)    收藏  举报