目录

一、先搞懂这些基础约定

二、数值函数:处理数字的 “小帮手”

1️⃣MOD (n1, n2):取余数

2️⃣ROUND (n1 [, n2]):四舍五入

3️⃣TRUNC (n1 [, n2]):截断(不四舍五入)

其他常用数值函数

三、字符型函数:字符串处理的 “利器”

1️⃣大小写转换:LOWER (c) 与 UPPER (c)

2️⃣字符串填充:LPAD (c1, n [, c2]) 与 RPAD (c1, n [, c2])

3️⃣去除首尾字符:TRIM、LTRIM、RTRIM

4️⃣字符串替换:REPLACE (c1, c2 [, c3])

5️⃣字符串截取:SUBSTR (c1, n1 [, n2])

其他常用字符函数

四、日期函数:玩转时间的 “魔法”

1️⃣获取当前时间:SYSDATE 与 CURRENT_DATE

2️⃣日期加减:ADD_MONTHS (d, n)

3️⃣月份相关:LAST_DAY 与 MONTHS_BETWEEN

4️⃣查找下一个星期几:NEXT_DAY (d, n)

5️⃣日期舍入与截断:ROUND (d [, fmt]) 与 TRUNC (d [, fmt])

五、转换函数:数据类型的 “转换器”

1️⃣TO_CHAR:将其他类型转为字符串

2️⃣TO_DATE:将字符串转为日期

3️⃣TO_NUMBER:将字符串转为数值

六、其他辅助函数:实用工具集合

1️⃣DECODE:增强型 “if-else”

2️⃣NVL 与 NVL2:处理 NULL 值

3️⃣GREATEST 与 LEAST:取最大 / 最小值


在 Oracle 数据库操作中,函数是简化数据处理、提升查询效率的重要工具。无论是数值计算、字符串处理,还是日期转换,掌握常用函数能让你在 SQL 编写中事半功倍。

一、先搞懂这些基础约定

在学习函数前,先明确 PPT 中的通用约定,帮你快速理解函数参数:

  • N:表示数字型参数(如整数、小数)
  • C:表示字符型参数(如字符串)
  • D:表示日期型参数(如系统时间、自定义日期)
  • []:括号内的参数为可选参数(可省略)
  • fmt:表示格式符(用于指定日期、数值的转换格式)
  • ||:表示 “任选其一”(如LEADING||TRAILING表示选LEADINGTRAILING

二、数值函数:处理数字的 “小帮手”

数值函数用于对数字型数据进行计算或处理,返回结果仍为数字。以下是最常用的几个:

1️⃣MOD (n1, n2):取余数

  • 功能:返回n1除以n2的余数;若n2=0,则直接返回n1
  • 示例:

    sql

    SELECT MOD(24, 5) FROM DUAL; -- 24÷5余4,结果为4
    SELECT MOD(10, 0) FROM DUAL; -- n2=0,返回n1,结果为10
    

2️⃣ROUND (n1 [, n2]):四舍五入

  • 功能:将n1四舍五入到小数点后n2位;n2默认值为 0(即四舍五入为整数);若n2为负数,则舍入到小数点左侧对应位数。
  • 示例:

    sql

    SELECT ROUND(23.56),      -- n2默认0,四舍五入为整数,结果24ROUND(23.56, 1),   -- 保留1位小数,结果23.6ROUND(23.56, -1)   -- 舍入到十位(左侧1位),结果20
    FROM DUAL;
    

3️⃣TRUNC (n1 [, n2]):截断(不四舍五入)

  • 功能:将n1截断到小数点后n2位(直接去掉多余位数,不四舍五入);n2默认 0(截断为整数);n2为负数时,截断到小数点左侧对应位数。
  • 与 ROUND 的区别:TRUNC 是 “硬截断”,ROUND 是 “四舍五入”。
  • 示例:

    sql

    SELECT TRUNC(23.56),      -- 截断为整数,结果23TRUNC(23.56, 1),   -- 保留1位小数,结果23.5TRUNC(23.56, -1)   -- 截断到十位,结果20
    FROM DUAL;
    

其他常用数值函数

函数功能示例
ABS(n)返回 n 的绝对值ABS(-100) → 100
CEIL(n)返回大于等于 n 的最小整数CEIL(18.2) → 19CEIL(-18.2) → -18
FLOOR(n)返回小于等于 n 的最大整数FLOOR(2.2) → 2FLOOR(-2.2) → -3
SQRT(n)返回 n 的平方根(n≥0)SQRT(9) → 3

三、字符型函数:字符串处理的 “利器”

字符型函数用于对字符串(CHARVARCHAR2等类型)进行转换、截取、替换等操作,返回结果多为字符串。

1️⃣大小写转换:LOWER (c) 与 UPPER (c)

  • LOWER(c):将字符串c中所有字符转为小写。
  • UPPER(c):将字符串c中所有字符转为大写。
  • 示例:

    sql

    SELECT LOWER('WhaT is tHis') FROM DUAL; -- 结果:'what is this'
    SELECT UPPER('WhaT is tHis') FROM DUAL; -- 结果:'WHAT IS THIS'
    

2️⃣字符串填充:LPAD (c1, n [, c2]) 与 RPAD (c1, n [, c2])

  • 功能:将字符串c1处理为长度为n的新字符串,不足时用指定字符补充(默认用空格),超出时截断。
  • 区别:LPAD从左侧补充,RPAD从右侧补充。
  • 规则:
    • n < c1的长度:从左(LPAD)或右(RPAD)截断到n位。
    • n > c1的长度:c2不为空时用c2补充,为空时用空格补充。
  • 示例:

    sql

    -- LPAD示例:原字符串为'WhaT is tHis'(长度11)
    SELECT LPAD('WhaT is tHis', 5),       -- n=5 < 11,左侧截断5位 → 'WhaT 'LPAD('WhaT is tHis', 25),      -- n=25 > 11,用空格左侧补充至25位LPAD('WhaT is tHis', 25, '-')  -- 用'-'左侧补充至25位 → '--------------WhaT is tHis'
    FROM DUAL;
    

3️⃣去除首尾字符:TRIM、LTRIM、RTRIM

这三个函数都用于移除字符串中的指定字符,但适用场景不同:

  • TRIM([[LEADING|TRAILING|BOTH] c2 FROM] c1):

    • 功能:移除c1中首尾的c2c2必须是单个字符)。
    • 可选参数:
      • LEADING:只移除左侧的c2
      • TRAILING:只移除右侧的c2
      • BOTH(默认):移除两侧的c2
      • 若不指定c2:默认移除首尾空格。
    • 示例:

      sql

      SELECT TRIM(' WhaT is tHis '), -- 移除首尾空格 → 'WhaT is tHis'TRIM('W' FROM 'WhaT is tHis w W'), -- 移除两侧'W' → 'haT is tHis w 'TRIM(LEADING 'W' FROM 'WhaT is tHis w W') -- 只移除左侧'W' → 'haT is tHis w W'
      FROM DUAL;
      
  • LTRIM(c1[, c2]):移除c1左侧所有与c2匹配的字符(c2可以是多个字符),默认移除左侧空格。

    • 示例:LTRIM('WWhhhhhaT is tHis', 'Wh') → 移除左侧所有 'W' 和 'h',结果为'aT is tHis'
  • RTRIM(c1[, c2]):与 LTRIM 类似,但移除右侧匹配字符。

    • 示例:RTRIM('WhaT is tHis w W', 'W w') → 移除右侧所有 'W'、' '、'w',结果为'WhaT is tHis'

4️⃣字符串替换:REPLACE (c1, c2 [, c3])

  • 功能:将c1中所有c2替换为c3;若c3为空,则删除所有c2
  • 示例:

    sql

    SELECT REPLACE('WWhhhhhaT', 'W', '-'), -- 将'W'替换为'-' → '--hhhhhaT'REPLACE('WWhhhhhaT', 'h')       -- 不指定c3,删除所有'h' → 'WWhaT'
    FROM DUAL;
    

5️⃣字符串截取:SUBSTR (c1, n1 [, n2])

  • 功能:从c1n1位置开始,截取长度为n2的子串(n2默认截取到末尾)。
  • 关键规则:
    • n1=0:等价于n1=1(从第一个字符开始);
    • n1>0:从左向右数第n1位开始;
    • n1<0:从右向左数第|n1|位开始;
    • n1超过c1长度:返回空。
  • 示例:

    sql

    SELECT SUBSTR('What is this', 5, 3), -- 从左数第5位开始,取3位 → 'is 'SUBSTR('What is this', -5, 3), -- 从右数第5位开始,取3位 → 'thi'SUBSTR('What is this', 50, 3)  -- n1超出长度,返回空
    FROM DUAL;
    

其他常用字符函数

函数功能示例
LENGTH(c)返回字符串 c 的长度(包括空格)LENGTH('A123中') → 5(1 个字母 + 2 个数字 + 1 个汉字)
INSTR(c1, c2[, n1[, n2]])返回c2c1中第n2次出现的位置(n1为起始查找位置,正数从左,负数从右)INSTR('abcdefg', 'e', -3) → 5(从右数第 3 位开始找 'e',位置为 5)

四、日期函数:玩转时间的 “魔法”

日期函数用于处理日期型数据(如获取当前时间、计算日期差等),返回结果多为日期或数值。

1️⃣获取当前时间:SYSDATE 与 CURRENT_DATE

  • 功能:均返回当前会话所在时区的系统时间。
  • 细微区别:特殊情况下,CURRENT_DATE可能比SYSDATE快 1 秒(因时区处理机制不同)。
  • 示例:

    sql

    SELECT SYSDATE, CURRENT_DATE FROM DUAL; -- 通常返回相同时间,格式为默认日期格式
    

2️⃣日期加减:ADD_MONTHS (d, n)

  • 功能:返回日期d加上n个月后的日期(n可为负数,即减月份)。
  • 示例:

    sql

    SELECT ADD_MONTHS(SYSDATE, 12),  -- 当前时间加12个月(1年后)ADD_MONTHS(SYSDATE, -3)   -- 当前时间减3个月(3个月前)
    FROM DUAL;
    

3️⃣月份相关:LAST_DAY 与 MONTHS_BETWEEN

  • LAST_DAY(d):返回d所在月份的最后一天。
    • 示例:LAST_DAY(SYSDATE) → 若当前是 2024-08-15,返回 2024-08-31。
  • MONTHS_BETWEEN(d1, d2):返回d1d2之间的月份差(d1>d2为正,反之为负)。
    • 示例:MONTHS_BETWEEN(SYSDATE, ADD_MONTHS(SYSDATE, -1)) → 1(相差 1 个月)。

4️⃣查找下一个星期几:NEXT_DAY (d, n)

  • 功能:返回d之后第一个星期n的日期(n可为数字 1-7 或星期的中文名称)。
  • 注意:n的格式必须与当前会话的默认星期格式一致(如中文环境下用 “星期四”,不能用 “Thursday”)。
  • 示例:

    sql

    SELECT NEXT_DAY(SYSDATE, 5),    -- 5表示星期五(不同环境可能有差异,建议用中文)NEXT_DAY(SYSDATE, '星期四') -- 直接用中文“星期四”更稳妥
    FROM DUAL;
    

5️⃣日期舍入与截断:ROUND (d [, fmt]) 与 TRUNC (d [, fmt])

  • 功能与数值型的ROUNDTRUNC类似,但操作对象是日期,fmt指定舍入 / 截断的单位(如'HH24'表示小时)。
  • 示例:

    sql

    SELECT ROUND(SYSDATE, 'HH24'),  -- 舍入到最近的小时(如15:30→16:00,15:29→15:00)TRUNC(SYSDATE, 'HH24')   -- 截断到当前小时(如15:30→15:00)
    FROM DUAL;
    

五、转换函数:数据类型的 “转换器”

转换函数用于在不同数据类型(如字符、日期、数值)之间转换,是 Oracle 中最常用的函数之一。

1️⃣TO_CHAR:将其他类型转为字符串

  • 功能:可将日期、数值或字符型数据转为VARCHAR2类型,支持自定义格式。
  • 三种用法:
    • 转换日期为字符串:TO_CHAR(d[, fmt])fmt指定日期格式(如'yyyy-mm-dd hh24:mi:ss')。
      • 示例:TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') → '2024-08-15 14:30:25'
    • 转换数值为字符串:TO_CHAR(n[, fmt])fmt可指定货币符号、千位分隔符等。
      • 示例:TO_CHAR(-100, 'L99G999D99MI') → '¥ 100.00-'(L 为本地货币符号,G 为千位分隔符,D 为小数点,MI 表示负数在右侧加 '-')。
    • 转换字符为字符:TO_CHAR(c),将其他字符类型(如CLOB)转为CHAR

2️⃣TO_DATE:将字符串转为日期

  • 功能:将字符串cfmt格式转为日期类型(DATE)。
  • 注意:fmt必须与c的格式一致,否则会报错。
  • 特殊格式:若fmt='J',则c必须是 Julian 日(公元制天数,1 表示公元前 4712 年 1 月 1 日)。
  • 示例:

    sql

    SELECT TO_DATE('2007-8-23 23:25:00', 'yyyy-mm-dd hh24:mi:ss'), -- 按指定格式转换TO_DATE(2454336, 'J') -- Julian日转换(结果为2008-01-01左右)
    FROM DUAL;
    

3️⃣TO_NUMBER:将字符串转为数值

  • 功能:将字符串cfmt格式转为数值类型(NUMBER)。
  • 示例:

    sql

    SELECT TO_NUMBER('-100.00', '9G999D99'), -- 按格式转换 → -100TO_NUMBER('00000100.00')          -- 自动忽略前导0 → 100
    FROM DUAL;
    

六、其他辅助函数:实用工具集合

这些函数虽不常用,但在特定场景下能大幅简化代码,值得掌握。

1️⃣DECODE:增强型 “if-else”

  • 功能:类似多条件判断,语法为DECODE(exp, s1, r1, s2, r2, ..., def)
  • 逻辑:若exp = s1则返回r1,若exp = s2则返回r2…… 否则返回默认值def(无def则返回空)。
  • 示例:

    sql

    SELECT DECODE('a2', 'a1', 'true1', 'a2', 'true2', 'default') FROM DUAL; -- 结果:'true2'
    

2️⃣NVL 与 NVL2:处理 NULL 值

  • NVL(c1, c2):若c1NULL,则返回c2;否则返回c1
    • 示例:NVL(NULL, '12') → '12'NVL('a', 'b') → 'a'
  • NVL2(c1, c2, c3):若c1不为NULL,返回c2;否则返回c3
    • 示例:NVL2('a', 'b', 'c') → 'b'NVL2(NULL, 'b', 'c') → 'c'

3️⃣GREATEST 与 LEAST:取最大 / 最小值

  • GREATEST(n1, n2, ...):返回参数中的最大值。
    • 示例:GREATEST(15, 5, 75, 8) → 75
  • LEAST(n1, n2, ...):返回参数中的最小值。
    • 示例:LEAST(15, 5, 75, 8) → 5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93789.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93789.shtml
英文地址,请注明出处:http://en.pswp.cn/web/93789.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch模型复现笔记-STN(空间注意力Transformer网络)讲解+架构搭建(可直接copy运行)+ MNIST数据集视角调整实验

Spatial Transformer Networks 本文了讲述STN的基本架构&#xff0c;空间几何注意力模块的基本原理&#xff0c;冒烟测试以及STN在MNIST数据集用于模型自动调整图片视角的实验&#xff0c;如果大家有不懂或者发现了错误的地方&#xff0c;欢迎讨论。 中文名&#xff1a;空间Tra…

【LeetCode】16. 最接近的三数之和

文章目录16. 最接近的三数之和题目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;解题思路算法分析问题本质分析排序双指针法详解双指针移动策略搜索过程可视化各种解法对比算法流程图边界情况处理时间复杂度分析空间复杂度分析关键优化点实际应用场景测试用例设计…

微信小程序实现蓝牙开启自动播放BGM

下面是一个完整的微信小程序实现方案&#xff0c;当蓝牙设备连接时自动播放背景音乐(BGM)。实现思路监听蓝牙设备连接状态当检测到蓝牙设备连接时&#xff0c;自动播放音乐当蓝牙断开时&#xff0c;停止音乐播放处理相关权限和用户交互完整代码实现1. 项目结构text/pages/index…

XML 序列化与操作详解笔记

一、XML 基础概念XML&#xff08;eXtensible Markup Language&#xff0c;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言&#xff0c;由 W3C 制定&#xff0c;具有以下特点&#xff1a;可扩展性&#xff1a;允许自定义标记&#xff08;如<Student>、<…

第八十四章:实战篇:图 → 视频:基于 AnimateDiff 的视频合成链路——让你的图片“活”起来,瞬间拥有“电影感”!

AI图生视频前言&#xff1a;从“刹那永恒”到“动态大片”——AnimateDiff&#xff0c;让图片“活”起来&#xff01;第一章&#xff1a;痛点直击——静态图像到视频&#xff0c;不是“幻灯片”那么简单&#xff01;第二章&#xff1a;探秘“时间魔法”&#xff1a;AnimateDiff…

2025深大计算机考研复试经验贴(已上岸)

如果你在初试出分前看到此贴 我建议&#xff1a; 准备机试和简历&#xff0c;即使你不估分&#xff1a;因为如果要准备春招的话&#xff0c;也总要刷题和做简历的。尽早估分&#xff0c;查一下往年的复试线&#xff0c;如果有望进复试&#xff0c;可尽早开始准备。 Preface …

用Pygame开发桌面小游戏:从入门到发布

一、引言 Pygame是一个基于Python的跨平台游戏开发库,它提供了简单易用的图形、声音和输入处理功能,非常适合新手入门游戏开发。本文将以"经典游戏合集"项目为例,带你一步步了解如何使用Pygame开发、打包和发布自己的桌面小游戏。 二、开发环境搭建 安装Python:…

CSS backdrop-filter:给元素背景添加模糊与色调的高级滤镜

在现代网页设计中&#xff0c;半透明元素搭配背景模糊效果已成为流行趋势 —— 从毛玻璃导航栏、模态框遮罩&#xff0c;到卡片悬停效果&#xff0c;这种设计能让界面更具层次感和高级感。实现这一效果的核心 CSS 属性&#xff0c;正是backdrop-filter。它能对元素背后的内容&a…

检索增强生成(RAG) 缓存增强生成(CAG) 生成中检索(RICHES) 知识库增强语言模型(KBLAM)

以下是当前主流的四大知识增强技术方案对比&#xff0c;涵盖核心原理、适用场景及最新发展趋势&#xff0c;为开发者提供清晰的技术选型参考&#xff1a; &#x1f50d; 一、RAG&#xff08;检索增强生成&#xff09;​​ 核心原理​&#xff1a; 动态检索外部知识库&#xff0…

LLM(大语言模型)的工作原理 图文讲解

目录 1. 条件概率&#xff1a;上下文预测的基础 2. LLM 是如何“看着上下文写出下一个词”的&#xff1f; 补充说明&#xff08;重要&#xff09; &#x1f4cc; Step 1: 输入处理 &#x1f4cc; Step 2: 概率计算 &#x1f4cc; Step 3: 决策选择 &#x1f914; 一个有…

Python netifaces 库详解:跨平台网络接口与 IP 地址管理

一、前言 在现代网络编程中&#xff0c;获取本机的网络接口信息和 IP 配置是非常常见的需求。 例如&#xff1a; 开发一个需要选择合适网卡的 网络服务&#xff1b;在多网卡环境下实现 流量路由与控制&#xff1b;在系统诊断工具中展示 IP/MAC 地址、子网掩码、默认网关&#x…

HTML应用指南:利用POST请求获取上海黄金交易所金价数据

上海黄金交易所&#xff08;SGE&#xff09;作为中国唯一经国务院批准、专门从事黄金等贵金属交易的国家级市场平台&#xff0c;自成立以来始终秉持“公开、公平、公正”的原则&#xff0c;致力于构建规范、高效、透明的贵金属交易市场体系。交易所通过完善的交易机制、严格的风…

C++常见面试题-1.C++基础

一、C 基础 1.1 语言特性与区别C 与 C 的主要区别是什么&#xff1f;C 为何被称为 “带类的 C”&#xff1f; 主要区别&#xff1a;C 引入了面向对象编程&#xff08;OOP&#xff09;特性&#xff08;类、继承、多态等&#xff09;&#xff0c;而 C 是过程式编程语言&#xff1…

Tomcat里catalina.sh详解

在 Tomcat 中&#xff0c;catalina.sh&#xff08;Linux/macOS&#xff09;或 catalina.bat&#xff08;Windows&#xff09;是 核心的启动和关闭脚本&#xff0c;用于控制 Tomcat 服务器的运行。它是 Tomcat 的“主控脚本”&#xff0c;负责设置环境变量、启动/关闭 JVM 进程&…

STM32之MCU和GPIO

一、单片机MCU 1.1 单片机和嵌入式 嵌入式系统 以计算机为核心&#xff0c;tips&#xff1a;计算机【处理单元&#xff0c;内存 硬盘】 可以控制的外部设备&#xff0c;传感器&#xff0c;电机&#xff0c;继电器 嵌入式开发 数据源--> 处理器(CPU MCU MPU) --> 执行器 …

22_基于深度学习的桃子成熟度检测系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)

目录 项目介绍&#x1f3af; 功能展示&#x1f31f; 一、环境安装&#x1f386; 环境配置说明&#x1f4d8; 安装指南说明&#x1f3a5; 环境安装教学视频 &#x1f31f; 二、数据集介绍&#x1f31f; 三、系统环境&#xff08;框架/依赖库&#xff09;说明&#x1f9f1; 系统环…

数据结构:二叉树oj练习

在讲今天的题目之前&#xff0c;我们还需要讲一下二叉树的以下特点&#xff1a; 对任意一颗二叉树&#xff0c;如果度为0的节点个数是n0&#xff0c;度为2的节点个数是n2&#xff0c;则有n0n21. 证明&#xff1a;二叉树总的节点个数是n&#xff0c;那么有nn0n1n2 二叉树的度为…

RabbitMQ高级特性——TTL、死信队列、延迟队列、事务、消息分发

目录 一、TTL 1.1设置消息的TTL 1.2设置队列的TTL 1.3两者之间的区别 二、死信队列 2.1死信的概念 2.2死信产生的条件&#xff1a; 2.3死信队列的实现 死信队列的工作原理 2.4常⻅⾯试题 三、延迟队列 3.1概念 3.2应用场景 3.3RabbitMQ 实现延迟队列的核心原理 1…

神经网络设计中关于BN归一化(Normalization)的讨论

在神经网络的结构中&#xff0c;我们常常可以看见归一化&#xff08;Normalization&#xff09;如BN的出现&#xff0c;无论是模型的backbone或者是neck的设计都与它有着重大的关系。 因此引发了我对它的思考&#xff0c;接下来我将从 是什么&#xff08;知识领域&#xff0c;诞…

MacOS 安全机制与“文件已损坏”排查完整指南

1. 背景说明macOS 为了保护系统安全&#xff0c;内置了多个安全机制&#xff1a;机制作用是否影响第三方 AppSIP (System Integrity Protection)保护系统关键文件/目录不被篡改高风险 App/驱动可能受限Gatekeeper限制未签名/未认证 App 运行阻止“未知开发者” App文件隔离属性…