oracle常用函数sql练习(Oracle函数SQL精练)


Oracle数据库作为企业级数据管理的核心工具,其内置的SQL函数体系是提升数据操作效率与复杂业务逻辑实现的关键支撑。通过系统化练习Oracle常用函数,开发者与数据分析师能够显著增强数据处理能力,包括但不限于数据清洗、转换、聚合与分析等场景。本文将从八个维度深入剖析Oracle常用函数的实践应用,结合多平台实际需求,通过案例演示与对比分析,揭示函数设计的内在逻辑与使用技巧。
在Oracle SQL函数体系中,字符串处理、日期运算、数值计算等基础功能模块是日常开发的核心工具,而聚合函数、窗口函数等高级特性则支撑了复杂的数据分析需求。值得注意的是,不同数据库平台(如MySQL、PostgreSQL)在函数命名、参数定义及功能边界上存在差异,这要求开发者需结合Oracle特有的语法规则进行针对性实践。
一、字符串处理函数
字符串函数用于实现文本数据的截取、拼接、替换与格式化操作,是数据清洗与标准化的重要工具。
函数分类 | 典型函数 | 功能描述 | 示例 |
---|---|---|---|
截取类 | SUBSTR(str, start, [length]) | 从指定位置截取子串 | SELECT SUBSTR('OracleDB', 3, 4) → 'acle' |
拼接类 | CONCAT || 操作符 | 连接多个字符串 | SELECT 'Hello'||'World' → 'HelloWorld' |
替换类 | REPLACE(str, search, replacement) | 替换指定子串 | SELECT REPLACE('ababab', 'ab', 'X') → 'XXX' |
二、日期与时间函数
Oracle采用DATE与TIMESTAMP数据类型存储时间数据,相关函数需注意默认格式与时区处理。
函数分类 | 典型函数 | 功能描述 | 示例 |
---|---|---|---|
提取类 | EXTRACT(field FROM date) | 获取日期字段值 | SELECT EXTRACT(YEAR FROM SYSDATE) → 当前年份 |
增减类 | ADD_MONTHS(date, n) | 月份加减运算 | SELECT ADD_MONTHS(DATE'2023-01-01', 3) → '2023-04-01' |
格式化类 | TO_CHAR(date, format) | 按格式输出字符串 | SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') → '20231025' |
三、数值计算函数
数值函数涵盖基础运算、舍入处理与数学运算,需注意NULL值传播特性。
函数分类 | 典型函数 | 功能描述 | 示例 |
---|---|---|---|
舍入类 | ROUND(n, [decimals]) | 四舍五入 | SELECT ROUND(123.456, 2) → 123.46 |
取整类 | TRUNC(n, [decimals]) | 截断小数 | SELECT TRUNC(123.999, 0) → 123 |
随机类 | MOD(n, m) | 取模运算 | SELECT MOD(10, 3) → 1 |
四、类型转换函数
隐式转换可能引发性能问题,显式转换函数可确保数据类型安全。
- TO_DATE: 将字符串转为DATE类型,需指定格式掩码
- TO_NUMBER: 将字符串或DATE转为数值类型
- TO_CHAR: 将任意类型转为字符串(含日期格式化)
示例:SELECT TO_DATE('2023/10/25', 'YYYY/MM/DD') FROM dual;
五、聚合函数
聚合函数与GROUP BY子句配合,实现数据统计与分组计算。
函数分类 | 典型函数 | 功能描述 | 示例 |
---|---|---|---|
计数类 | COUNT([DISTINCT] expr) | 统计非空值数量 | SELECT COUNT() FROM emp → 员工总数 |
求和类 | SUM(expr) | 数值求和 | SELECT SUM(salary) FROM emp → 工资总额 |
极值类 | MAX(expr)/MIN(expr) | 获取最大/最小值 | SELECT MAX(hiredate) FROM emp → 最新入职日期 |
六、条件判断函数
CASE表达式与DECODE函数提供多分支逻辑判断能力。
- CASE: 标准SQL条件表达式,支持多条件嵌套
- DECODE: Oracle特有简写形式,等效于简单CASE
- NVL: 空值替换函数,处理NULL值逻辑
示例:SELECT DECODE(job_id, 'IT_PROG', 'Developer', 'SH_CLERK', ' Clerk', 'Other') FROM emp;
七、分析与窗口函数
窗口函数支持分组内排名与累计计算,需结合OVER子句使用。
函数分类 | 典型函数 | 功能描述 | 示例 |
---|---|---|---|
排名类 | RANK()/DENSE_RANK()/ROW_NUMBER() | 分组排序编号 | SELECT RANK() OVER (ORDER BY salary DESC) FROM emp |
累计类 | SUM(expr) OVER (PARTITION BY ...) | 分组累计求和 | SELECT name, SUM(score) OVER (ORDER BY exam_date) FROM scores |
偏移类 | LAG(expr, n, [default])/LEAD(expr, n, [default]) | 获取前后行数据 | SELECT LAG(price, 1) OVER (ORDER BY date) FROM stock → 前一日价格 |
八、正则表达式函数
Oracle通过REGEXP_类函数实现模式匹配与替换,较LIKE具有更高灵活性。
- REGEXP_LIKE: 正则匹配判断,支持复杂模式(如^[A-Z])
示例:SELECT REGEXP_REPLACE('abc123xyz', '[^a-z]', '') → 'abcxyz'
通过上述八大类函数的系统实践,开发者可逐步构建完整的Oracle SQL函数知识体系。在实际项目中,需特别注意以下几点:首先,函数嵌套使用时要考虑优先级与执行顺序;其次,不同数据类型间的隐式转换可能引发性能问题;最后,窗口函数与聚合函数的结合使用可实现复杂的数据分析需求。建议通过搭建测试环境,结合HR、库存管理等典型业务场景进行反复演练,例如实现工资数据的分级统计、库存周转率的窗口计算等。此外,需关注Oracle与MySQL等其他数据库在函数语法上的差异,如日期格式掩码的书写规则(YYYY-MM-DD vs YYYY/MM/DD),避免跨平台迁移时出现兼容性问题。持续积累函数使用经验,将显著提升SQL开发效率与代码质量。





