当前位置: 首页 > news >正文

(课堂笔记)Oracle 常用函数:数值、字符串、日期处理

本文系统总结了Oracle常用函数,分为数值、字符串和日期处理三大类。


数值函数包括ABS、POWER、ROUND等;字符串函数涵盖REPLACE、SUBSTR、INSTR等;日期函数包含LAST_DAY、ADD_MONTHS等。


文中提供了典型示例和实用技巧,如统计字符出现次数、模糊查询替代方案等。


最后通过综合练习演示了函数组合应用,并给出了最佳实践建议,如日期运算优先使用MONTHS_BETWEEN、字符串拼接推荐使用"||"等。


这些函数为Oracle数据库操作提供了强大的数据处理能力。


课堂笔记

根据你提供的课堂笔记内容,以下是对Oracle 常用函数的系统总结与梳理,分为数值处理、字符串处理、日期处理三大类,并附有典型示例和练习思路。


一、数值函数(针对 NUMBER 类型)

函数说明示例
ABS(x)绝对值SELECT ABS(-3.4) FROM DUAL;
POWER(x, y)x 的 y 次幂SELECT POWER(4,2) FROM DUAL;
ROUND(x, y)四舍五入保留 y 位小数SELECT ROUND(-3.4567,2) FROM DUAL;
FLOOR(x)向下取整SELECT FLOOR(-3.567) FROM DUAL;
CEIL(x)向上取整SELECT CEIL(3.14) FROM DUAL;
TRUNC(x, y)截断(不四舍五入)SELECT TRUNC(3.567,2) FROM DUAL;
MOD(x, y)取余数SELECT MOD(7,3) FROM DUAL;

✅ 注意:TRUNC不进行四舍五入,直接舍弃多余小数位。


二、字符串函数(针对 VARCHAR2 类型)

函数说明示例
REPLACE(str, old, new)替换子串SELECT REPLACE('ABBCCDD','B','*') FROM DUAL;
LENGTH(str)字符串长度SELECT LENGTH('中国') FROM DUAL;
SUBSTR(str, m, n)从 m 位开始截取 n 位SELECT SUBSTR('ABCDEFG',2,3) FROM DUAL;
INSTR(str, sub, m, n)查找子串位置SELECT INSTR('ABBDSDSKKD','D',5,2) FROM DUAL;
TRIM(str)去除左右空格SELECT TRIM(' A B C D ') FROM DUAL;
CONCAT(x, y)拼接字符串SELECT CONCAT('Hello',' World') FROM DUAL;
LPAD(str, len, pad)左填充SELECT LPAD('8888',8,'*') FROM DUAL;
RPAD(str, len, pad)右填充SELECT RPAD('8888',8,'*') FROM DUAL;

常用技巧:

  • 统计某字符出现次数
    LENGTH(str) - LENGTH(REPLACE(str, '目标字符'))

  • 模糊查询替代方案
    WHERE INSTR(ename, 'K') > 0等价于LIKE '%K%'

  • 字符串统一格式处理:结合SUBSTR+INSTR+LPAD


三、日期函数(针对 DATE 类型)

函数说明示例
LAST_DAY(date)当月最后一天SELECT LAST_DAY(SYSDATE) FROM DUAL;
ADD_MONTHS(date, n)增加 n 个月SELECT ADD_MONTHS(SYSDATE, -2) FROM DUAL;
MONTHS_BETWEEN(d1, d2)月数差(小数)SELECT MONTHS_BETWEEN(...) FROM DUAL;
TRUNC(date, '格式')截断到指定精度TRUNC(SYSDATE,'MM')→ 当月第一天
date ± n推后/提前 n 天SELECT SYSDATE + 10 FROM DUAL;
date1 - date2相差天数SELECT SYSDATE - HIREDATE FROM EMP;

常用日期截断格式:

  • 'YYYY'→ 当年第一天(2026-01-01)

  • 'MM'→ 当月第一天(2026-04-01)

  • 'Q'→ 当季第一天(2026-04-01)

  • 'DD'→ 当天(不变)

典型计算:

  • 入职月数(向下取整):
    FLOOR(MONTHS_BETWEEN(SYSDATE, HIREDATE))

  • 入职年数
    FLOOR(MONTHS_BETWEEN(...) / 12)

  • 上季度最后一天
    TRUNC(SYSDATE,'Q') - 1


四、综合练习与典型思路

✅ 练习 1:统计字符串中 K 的个数

sql

SELECT LENGTH('HBJBDKWWJJJK34K224HKN') - LENGTH(REPLACE('HBJBDKWWJJJK34K224HKN','K')) AS CNT FROM DUAL;

✅ 练习 2:姓名打码(首尾保留)

sql

SELECT SUBSTR(ENAME,1,1) || LPAD('*', LENGTH(ENAME)-2, '*') || SUBSTR(ENAME,-1) AS NEW_ENAME FROM EMP;

✅ 练习 3:截至当月第一天,员工已领月薪月数

sql

SELECT FLOOR(MONTHS_BETWEEN(TRUNC(SYSDATE,'MM'), HIREDATE)) AS 月数 FROM EMP;

✅ 练习 4:计算机(1970-01-01)至上季度最后一天的月数

sql

SELECT FLOOR(MONTHS_BETWEEN(TRUNC(SYSDATE,'Q')-1, TO_DATE('1970-01-01','YYYY-MM-DD'))) AS 月份数 FROM DUAL;

五、注意事项 & 最佳实践

  • 日期运算优先使用MONTHS_BETWEEN,避免手动处理天数/闰年。

  • 字符串拼接推荐使用||,比CONCAT更灵活。

  • 去空格TRIM只去两端,如需去全部空格用REPLACE(str, ' ', '')

  • 日期截断常用于统计“月初”、“季初”等固定时间点。

  • Oracle 中 DUAL是系统虚拟表,用于测试函数或常量查询。

http://www.jsqmd.com/news/700226/

相关文章:

  • CUDA 13.3正式版发布前夜必读:AI框架厂商未公开的3大ABI断裂点(含TensorRT-10.3/ONNX Runtime 1.18兼容性矩阵速查表)
  • HeteroFlow完成主流国产GPU适配,打破国外技术垄断助力算力生态建设
  • Power BI学习笔记第10篇:实战案例 — 销售数据分析仪表板
  • 嵌入式机器人开发实战:从零到整的20个STM32F4核心示例深度解析
  • DeepSeek V4写的文章AI率高怎么降?2026年4月3步降到5% - 我要发一区
  • 如何用新蜂商城在2分钟内搭建完整的电商系统?
  • 英雄联盟国服终极换肤神器:R3nzSkin完整使用指南
  • (课堂笔记)Oracle 表关联:连接类型、数据发散、自关联、同环比计算
  • 高级安卓开发在DVR类产品中的应用与挑战
  • .NET 集成 SqlSugar、读写分离 、Redis
  • 生产级AI智能体架构实战:从原型到产品的工程化指南
  • DeepSeek V4写完用哪款降AI?2026年4月4款工具横评 - 我要发一区
  • 2026年独立站+TikTok Shop双轨策略:为什么聪明品牌不再押注单一渠道 - SocialEcho社媒管理
  • OpenCore Legacy Patcher终极指南:如何免费让旧Mac焕发新生
  • 【AI工具】2026年实用免费AI工具全分享:聊天、编程、设计三类工具实测对比
  • 终极DOL汉化美化整合指南:5分钟打造完美中文游戏体验
  • 从“学模型”到“做应用”:AI产品的30天实战进化指南
  • 在 Claude Code 里跑 DeepSeek-V4-Pro,三步搞定
  • 毫米波大规模MIMO中的波束空间处理技术解析
  • 效果展示:LFM2.5-VL-1.6B多语言图片理解实测,小模型也有大能耐
  • C语言内存安全面试必考TOP 15题(2026最新真题库+逐行安全分析)
  • 从‘虹猫蓝兔’到终身学习:聊聊Continual Learning如何让AI模型像人一样成长
  • LSTM时间序列预测实战:从原理到销售预测应用
  • 实用高效的AutoHotkey脚本编译指南:轻松将AHK转换为EXE可执行文件
  • 全局坐标转局部坐标推导 - Ladisson
  • 固态硬盘(SSD)优化特辑:TRIM、预留空间与垃圾回收
  • 深度学习必读三书:从理论到实践的经典指南
  • 工业自动化工程师必装的VSCode插件(2026版协议解析器深度拆解)
  • D2RML终极教程:暗黑2重制版一键多开神器,告别繁琐登录!
  • 用STM32CubeMX和HAL库快速上手MAX30102,告别繁琐的寄存器配置