【Oracle11g SQL详解】日期和时间函数:SYSDATE、TO_DATE、TO_CHAR 等

日期和时间函数:SYSDATETO_DATETO_CHAR

在 Oracle 数据库中,日期和时间函数用于处理日期和时间数据。它们在记录创建时间、分析时间间隔、格式化输出等场景中非常重要。本文将详细讲解常用的日期和时间函数及其应用。


一、SYSDATE:获取当前系统日期和时间
1. 功能

SYSDATE 返回数据库服务器当前的日期和时间。

2. 语法
复制代码
SYSDATE
3. 示例
复制代码
SELECT SYSDATE AS current_date
FROM dual;
-- 结果:2024-12-11 14:30:45
4. 提取日期的部分信息

可以结合其他函数提取日期部分:

复制代码
SELECT 
  EXTRACT(YEAR FROM SYSDATE) AS current_year,
  EXTRACT(MONTH FROM SYSDATE) AS current_month,
  EXTRACT(DAY FROM SYSDATE) AS current_day
FROM dual;
-- 结果:2024 | 12 | 11

二、TO_DATE:将字符串转换为日期
1. 功能

TO_DATE 函数将字符串格式的日期转换为 Oracle 的日期类型。

2. 语法
复制代码
TO_DATE(string, format_model)
  • string:待转换的日期字符串。
  • format_model:指定字符串的格式。
3. 常用格式符号

格式符

描述

YYYY

四位年份

MM

两位月份

DD

两位日期

HH24

24 小时制小时

MI

分钟

SS

4. 示例
复制代码
SELECT TO_DATE('2024-12-11 14:30:45', 'YYYY-MM-DD HH24:MI:SS') AS converted_date
FROM dual;
-- 结果:2024-12-11 14:30:45

三、TO_CHAR:将日期转换为字符串
1. 功能

TO_CHAR 函数将日期类型的数据转换为指定格式的字符串。

2. 语法
复制代码
TO_CHAR(date, format_model)
  • date:要转换的日期。
  • format_model:指定转换后的字符串格式。
3. 示例

将当前日期转换为指定格式:

复制代码
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date
FROM dual;
-- 结果:2024-12-11 14:30:45

获取星期和月份名称

复制代码
SELECT TO_CHAR(SYSDATE, 'DAY') AS week_day,
       TO_CHAR(SYSDATE, 'MONTH') AS month_name
FROM dual;
-- 结果:WEDNESDAY | DECEMBER

四、日期加减运算

Oracle 支持对日期进行加减操作,直接以天为单位计算。

1. 日期加法

增加 10 天:

复制代码
SELECT SYSDATE + 10 AS future_date
FROM dual;
-- 结果:2024-12-21
2. 日期减法

减去 5 天:

复制代码
SELECT SYSDATE - 5 AS past_date
FROM dual;
-- 结果:2024-12-06
3. 计算两个日期的差值

返回天数:

复制代码
SELECT SYSDATE - TO_DATE('2024-12-01', 'YYYY-MM-DD') AS days_difference
FROM dual;
-- 结果:10

五、ADD_MONTHS:增加或减少月份
1. 功能

ADD_MONTHS 函数用于在指定日期上增加或减少指定的月数。

2. 语法
复制代码
ADD_MONTHS(date, number_of_months)
3. 示例
复制代码
SELECT ADD_MONTHS(SYSDATE, 3) AS future_date,
       ADD_MONTHS(SYSDATE, -3) AS past_date
FROM dual;
-- 结果:2025-03-11 | 2024-09-11

六、LAST_DAYNEXT_DAY
1. LAST_DAY:获取指定月份的最后一天
复制代码
SELECT LAST_DAY(SYSDATE) AS last_day_of_month
FROM dual;
-- 结果:2024-12-31
2. NEXT_DAY:获取指定日期之后的下一个特定星期几
复制代码
SELECT NEXT_DAY(SYSDATE, 'FRIDAY') AS next_friday
FROM dual;
-- 结果:2024-12-13

七、日期格式化的常见应用
1. 获取年、月、日
复制代码
SELECT 
  TO_CHAR(SYSDATE, 'YYYY') AS year,
  TO_CHAR(SYSDATE, 'MM') AS month,
  TO_CHAR(SYSDATE, 'DD') AS day
FROM dual;
-- 结果:2024 | 12 | 11
2. 获取时、分、秒
复制代码
SELECT 
  TO_CHAR(SYSDATE, 'HH24') AS hour,
  TO_CHAR(SYSDATE, 'MI') AS minute,
  TO_CHAR(SYSDATE, 'SS') AS second
FROM dual;
-- 结果:14 | 30 | 45

八、综合实例
1. 计算两日期间的完整月数差
复制代码
SELECT MONTHS_BETWEEN(TO_DATE('2025-06-01', 'YYYY-MM-DD'), TO_DATE('2024-12-01', 'YYYY-MM-DD')) AS months_difference
FROM dual;
-- 结果:6
2. 自动设置某日期为本月的第一天
复制代码
SELECT TRUNC(SYSDATE, 'MM') AS first_day_of_month
FROM dual;
-- 结果:2024-12-01
3. 格式化输出为自定义字符串
复制代码
SELECT TO_CHAR(SYSDATE, '"Today is" DDTH MONTH, YYYY') AS custom_format
FROM dual;
-- 结果:Today is 11TH DECEMBER, 2024

九、小结
  • SYSDATE 提供当前日期和时间。
  • TO_DATE 将字符串转换为日期,格式灵活多样。
  • TO_CHAR 用于将日期转为自定义格式的字符串。
  • 日期计算和运算支持天数、月份、年等单位,结合函数如 ADD_MONTHSLAST_DAY 等,可以轻松实现复杂的日期处理。

通过熟练使用这些函数,可以大幅提升日期和时间操作的效率和准确性。

相关推荐
m0_613856292 小时前
mysql如何利用事务隔离级别解决特定业务冲突_mysql隔离方案选型
jvm·数据库·python
Adios7942 小时前
VPR:Pitts50K和Norland数据集下载
数据库
东风破1372 小时前
DM用户权限、表、约束等对象的基本操作,SQL日志的开启介绍
数据库·sql·dm达梦数据库
收获不止数据库2 小时前
达梦9发布会归来:AI 时代,我们需要一款什么样的数据库?
数据库·人工智能·ai·语言模型·数据分析
小宇的天下2 小时前
Virtuoso GUI 界面中的关键模块定义
数据库
bqq198610263 小时前
MySQL 5.7 与 MySQL 8.0 的主要区别
数据库·mysql
juniperhan3 小时前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
Elastic 中国社区官方博客3 小时前
Elastic-caveman : 在不损失 Elastic 最佳效果的情况下,将 AI 响应 tokens 减少64%
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
互联网推荐官4 小时前
上海软件定制开发全流程拆解:需求分析、技术选型与交付管理的工程实践
大数据·数据库·需求分析
专注API从业者4 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库