活动介绍

OracleSQL函数全解析:从日期到自定义的深度探索

立即解锁
发布时间: 2025-08-20 01:15:46 阅读量: 1 订阅数: 4
### Oracle SQL 函数全解析:从日期到自定义的深度探索 在 Oracle SQL 中,函数是强大的工具,能帮助我们更高效地处理数据。本文将详细介绍各种函数,包括正则替换、日期函数、通用函数、转换函数以及存储函数等。 #### 正则替换函数 REGEXP_REPLACE `REGEXP_REPLACE` 函数可用于进行正则表达式替换。例如: ```sql REGEXP_REPLACE(COMMENTS,'F[A-Z]*','?',1,1,'I') ``` 示例结果如下: ```plaintext Hired as the new manager ? the accounting department Founder and ? employee of the company Project (half a month) ? the ACCOUNTING department ``` 需要注意的是,如果要进行不区分大小写的替换,必须为所有函数参数指定值,包括 `pos` 和 `occurrence` 的默认值。`WHERE` 子句可确保查询仅返回匹配的行。同时,“Founder” 一词未被替换,因为其前面没有空格,要留意模式开头的空格。 #### 日期函数 在讨论各种 Oracle 日期函数之前,先回顾一下使用预定义的 ANSI/ISO SQL 标准格式指定日期/时间相关常量(或字面量)的语法。 | 字面量 | 示例 | | --- | --- | | DATE 'yyyy-mm-dd' | DATE '2014-09-25' | | TIMESTAMP 'yyyy-mm-dd hh24:mi:ss.ffffff' [AT TIME ZONE '...'] | TIMESTAMP '2014-09-25 23:59:59.99999' AT TIME ZONE 'CET' | | TIMESTAMP 'yyyy-mm-dd hh24:mi:ss.ffffff {+|-}hh:mi' | TIMESTAMP '2014-09-25 23:59:59.99 -5:00' | | INTERVAL 'expr' <qualifier> | INTERVAL '1' YEAR <br> INTERVAL '1 2:3' DAY TO MINUTE | 你可以使用 SQL*Plus 的 `&` 替换方法进行实验,例如: ```sql select &input_date from dual; ``` 如果你直接输入字母数字字符串,如 '21 - JUN - 04',则必须依赖 Oracle 的隐式转换。此隐式转换的成功与否取决于会话的 `NLS_DATE_FORMAT` 和 `NLS_TIMESTAMP_FORMAT` 参数设置。若要查看会话的所有当前 NLS 参数设置的概述,可使用以下查询: ```sql select * from nls_session_parameters; ``` 在 SQL Developer 中,可通过 `Tools/Preferences/Database/NLS` 在会话级别查看和更改此信息。在 SQL*Plus(当然也包括 SQL Developer)中,可使用以下语句设置首选日期格式: ```sql SQL> alter session set NLS_DATE_FORMAT = 'dd Month yyyy hh24:mi:ss'; SYSDATE -------------------------- 13 February 2014 10:33:42 ``` 常见的 Oracle 日期函数如下: | 函数 | 描述 | | --- | --- | | ADD_MONTHS(d, n) | 日期 d 加上 n 个月 | | MONTHS_BETWEEN(d, e) | 日期 d 和 e 之间的月数 | | LAST_DAY(d) | 包含日期 d 的月份的最后一天 | | NEXT_DAY(d, weekday) | d 之后的第一个工作日(周一、周二等) | | NEW_TIME(d, z1, z2) | 将日期/时间从时区 z1 转换为 z2 | | ROUND(d[, fmt]) | 按 fmt 对 d 进行四舍五入(fmt 的默认值为午夜) | | TRUNC(d[, fmt]) | 按 fmt 对 d 进行截断(fmt 的默认值为午夜) | | EXTRACT(c FROM d) | 从表达式 d 中提取日期/时间组件 c | 下面是这些函数的具体示例: - **EXTRACT 函数**:可使用 ANSI/ISO 标准的 `EXTRACT` 函数提取日期或时间戳表达式的各个组件。 ```sql select bdate , extract(year from bdate) as year_of_birth , extract(month from bdate) as month_of_birth , extract(day from bdate) as day_of_birth from employees where ename = 'KING'; ``` 结果如下: ```plaintext BDATE YEAR_OF_BIRTH MONTH_OF_BIRTH DAY_OF_BIRTH ----------- ------------- -------------- ------------ 17-NOV-1952 1952 11 17 ``` - **ROUND 和 TRUNC 函数**:`ROUND` 和 `TRUNC` 函数支持的日期格式(fmt)如下表所示。默认格式为 'DD',即四舍五入或截断到午夜。例如,`TRUNC(SYSDATE,'DD')` 将当前系统日期和时间截断到午夜。 | 格式 | 描述 | | --- | --- | | CC, SCC | 世纪,带或不带负号(公元前) | | [S]YYYY, [S]YEAR, YYY, YY, Y | 年份(多种表示形式) | | IYYY, IYY, IY, I | ISO 年份 | | Q | 季度 | | MONTH, MON, MM, RM | 月份(全名、缩写名、数字、罗马数字) | | IW, WW | (ISO)周数 | | W | 星期几 | | DDD, DD, J | 日(年中的日/月中的日/儒略日) | | DAY, DY, D | 最接近的星期日 | | HH, HH12, HH24 | 小时 | | MI | 分钟 | - **MONTHS_BETWEEN 和 ADD_MONTHS 函数**: ```sql -- MONTHS_BETWEEN 函数示例 select ename, months_between(sysdate,bdate) from employees where deptno = 10; -- ADD_MONTHS 函数示例 select add_months('29-JAN-1996', 1) add_months_1 , add_months('29-JAN-1997', 1) add_months_2 , add_months('11-AUG-1997',-3) add_months_3 from dual; ``` `MONTHS_BETWEEN` 函数结果: ```plaintext ENAME MONTHS_BETWEEN(SYSDATE,BDATE) -------- ----------------------------- CLARK 467.5042 KING 618.2461 MILLER 508.0525 ``` `ADD_MONTHS` 函数结果: ```plaintext ADD_MONTHS_1 ADD_MONTHS_2 ADD_MONTHS_3 ------------ ------------ ------------ 29-FEB-1996 28-FEB-1997 11-MAY-1997 ``` 需要注意非闰年的情况,并且在使用 `ADD_MONTHS` 函数时,最好使用 `DATE` 关键字或 `TO_DATE` 转换函数来指定日期字面量,以避免因隐式转换而出现错误。 - **NEXT_DAY 和 LAST_DAY 函数**: ```sql select sysdate , next_day(sysdate,'SAT') as next_sat , last_day(sysdate) as last_day , round(sysdate,'YY') as round_yy , trunc(sysdate,'CC') as trunc_cc from dual; ``` 结果如下: ```plaintext SYSDATE NEXT_SAT LAST_DAY ROUND_YY TRUNC_CC ----------- ----------- ----------- ----------- ----------- 13-feb-2014 15-feb-2014 28-feb-2014 01-jan-2014 01-jan-2001 ``` #### 通用函数 重要的通用(与数据类型无关)函数如下表所示: | 函数 | 描述 | | --- | --- | | GREATEST(a, b, ...) | 函数参数中的最大值 | | LEAST(a, b, ...) | 函数参数中的最小值 | | NULLIF(a, b) | 如果 a = b,则返回 NULL;否则返回 a | | COALESCE(a, b, ...) | 第一个非 NULL 参数(如果所有参数都为 NULL,则返回 NULL) | | NVL(x, y) | 如果 x 为 NULL,则返回 y;否则返回 x | | NVL2(x, y, z) | 如果 x 不为 NULL,则返回 y;否则返回 z | | CASE x when a1 then b1 when a2 then b2 ... else y end | 根据 x 的值返回相应的结果 | | DECODE(x, a1, b1, a2, b2, ..., an, bn [, y]) | 如果 x = a1,则返回 b1;如果 x = a2,则返回 b2;...;如果 x = an,则返回 bn
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

LI_李波

资深数据库专家
北理工计算机硕士,曾在一家全球领先的互联网巨头公司担任数据库工程师,负责设计、优化和维护公司核心数据库系统,在大规模数据处理和数据库系统架构设计方面颇有造诣。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看

最新推荐

构建可扩展医疗设备集成方案:飞利浦监护仪接口扩展性深入解析

![构建可扩展医疗设备集成方案:飞利浦监护仪接口扩展性深入解析](https://media.licdn.com/dms/image/D4D12AQHs8vpuNtEapQ/article-cover_image-shrink_600_2000/0/1679296168885?e=2147483647&v=beta&t=NtAWpRD677ArMOJ_LdtU96A1FdowU-FibtK8lMrDcsQ) # 摘要 本文探讨了医疗设备集成的重要性和面临的挑战,重点分析了飞利浦监护仪接口技术的基础以及可扩展集成方案的理论框架。通过研究监护仪接口的技术规格、数据管理和标准化兼容性,本文阐述了实

【Matlab优化算法实战】:精通Matlab实现复杂问题优化的技巧

![【Matlab优化算法实战】:精通Matlab实现复杂问题优化的技巧](https://img-blog.csdnimg.cn/baf501c9d2d14136a29534d2648d6553.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Zyo6Lev5LiK77yM5q2j5Ye65Y-R,size_20,color_FFFFFF,t_70,g_se,x_16) # 摘要 本文全面概述了Matlab优化算法的理论基础、实践操作以及高级应用。首先,介绍了数学优化问题的分类和优化

【机器人灵巧手医疗应用】:手术精度革命的新工具

![【机器人灵巧手医疗应用】:手术精度革命的新工具](https://assets.cureus.com/uploads/figure/file/945468/article_river_58294d90dc6a11ee83bdf793876296c8-Picture1.png) # 摘要 随着医疗技术的进步,机器人灵巧手在手术精度和康复辅助方面展现出巨大潜力,已成为推动医疗领域创新的重要力量。本文首先介绍了机器人灵巧手在医疗领域的应用背景,随后深入探讨了其技术原理,包括机械结构设计、控制系统、以及传感技术。文章还通过具体应用案例,如外科手术、康复辅助以及医学教育与培训,分析了灵巧手的实际应

STM8点阵屏汉字显示:用户界面设计与体验优化的终极指南

![STM8点阵屏汉字显示:用户界面设计与体验优化的终极指南](http://microcontrollerslab.com/wp-content/uploads/2023/06/select-PC13-as-an-external-interrupt-source-STM32CubeIDE.jpg) # 摘要 STM8点阵屏技术作为一种重要的显示解决方案,广泛应用于嵌入式系统和用户界面设计中。本文首先介绍STM8点阵屏的技术基础,然后深入探讨汉字显示的原理,并着重分析用户界面设计策略,包括布局技巧、字体选择、用户交互逻辑及动态效果实现等。接着,本文详细阐述了STM8点阵屏的编程实践,涵盖开

【C#跨平台开发与Focas1_2 SDK】:打造跨平台CNC应用的终极指南

![Focas1_2 SDK](https://www.3a0598.com/uploadfile/2023/0419/20230419114643333.png) # 摘要 本文全面介绍了C#跨平台开发的原理与实践,从基础知识到高级应用,详细阐述了C#语言核心概念、.NET Core与Mono平台的对比、跨平台工具和库的选择。通过详细解读Focas1_2 SDK的功能与集成方法,本文提供了构建跨平台CNC应用的深入指南,涵盖CNC通信协议的设计、跨平台用户界面的开发以及部署与性能优化策略。实践案例分析部分则通过迁移现有应用和开发新应用的实战经验,向读者展示了具体的技术应用场景。最后,本文对

【游戏物理引擎基础】:迷宫游戏中的物理效果实现

![基于C++-EasyX编写的益智迷宫小游戏项目源码.zip](https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/7eae7ef4-7fbf-4de2-b153-48a18c117e42/d9ytliu-34edfe51-a0eb-4516-a9d0-020c77a80aff.png/v1/fill/w_1024,h_547,q_80,strp/snap_2016_04_13_at_08_40_10_by_draconianrain_d9ytliu-fullview.jpg?token=eyJ0eXAiOiJKV1QiLCJh

【wxWidgets多媒体处理】:实现跨平台音频与视频播放

![【wxWidgets多媒体处理】:实现跨平台音频与视频播放](https://media.licdn.com/dms/image/D4D12AQH6dGtXzzYAKQ/article-cover_image-shrink_600_2000/0/1708803555419?e=2147483647&v=beta&t=m_fxE5WkzNZ45RAzU2jeNFZXiv-kqqsPDlcARrwDp8Y) # 摘要 本文详细探讨了基于wxWidgets的跨平台多媒体开发,涵盖了多媒体处理的基础理论知识、在wxWidgets中的实践应用,以及相关应用的优化与调试方法。首先介绍多媒体数据类型与

MATLAB程序设计模式优化:提升pv_matlab项目可维护性的最佳实践

![MATLAB程序设计模式优化:提升pv_matlab项目可维护性的最佳实践](https://pgaleone.eu/images/unreal-coverage/cov-long.png) # 摘要 本文全面探讨了MATLAB程序设计模式的基础知识和最佳实践,包括代码的组织结构、面向对象编程、设计模式应用、性能优化、版本控制与协作以及测试与质量保证。通过对MATLAB代码结构化的深入分析,介绍了函数与脚本的差异和代码模块化的重要性。接着,本文详细讲解了面向对象编程中的类定义、继承、封装以及代码重用策略。在设计模式部分,本文探讨了创建型、结构型和行为型模式在MATLAB编程中的实现与应用

【BT-audio音频抓取工具比较】:主流工具功能对比与选择指南

# 摘要 本文旨在全面介绍BT-audio音频抓取工具,从理论基础、功能对比、实践应用到安全性与隐私保护等多个维度进行了深入探讨。通过分析音频信号的原理与格式、抓取工具的工作机制以及相关法律和伦理问题,本文详细阐述了不同音频抓取工具的技术特点和抓取效率。实践应用章节进一步讲解了音频抓取在不同场景中的应用方法和技巧,并提供了故障排除的指导。在讨论工具安全性与隐私保护时,强调了用户数据安全的重要性和提高工具安全性的策略。最后,本文对音频抓取工具的未来发展和市场需求进行了展望,并提出了选择合适工具的建议。整体而言,本文为音频抓取工具的用户提供了一个全面的参考资料和指导手册。 # 关键字 音频抓取;

【调试与性能优化】:LMS滤波器在Verilog中的实现技巧

![【调试与性能优化】:LMS滤波器在Verilog中的实现技巧](https://img-blog.csdnimg.cn/img_convert/b111b02c2bac6554e8f57536c89f3c05.png) # 摘要 本文详细探讨了最小均方(LMS)滤波器的理论基础、硬件实现、调试技巧以及性能优化策略,并通过实际案例分析展示了其在信号处理中的应用。LMS滤波器作为一种自适应滤波器,在数字信号处理领域具有重要地位。通过理论章节,我们阐述了LMS算法的工作原理和数学模型,以及数字信号处理的基础知识。接着,文章介绍了LMS滤波器的Verilog实现,包括Verilog语言基础、模块