导读:本期聚焦于小伙伴创作的《Oracle日期时间函数详解:SYSDATE、TO_CHAR、ADD_MONTHS等常用函数与场景应用》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Oracle日期时间函数详解:SYSDATE、TO_CHAR、ADD_MONTHS等常用函数与场景应用》有用,将其分享出去将是对创作者最好的鼓励。

Oracle 日期时间函数使用总结

Oracle 数据库提供了丰富的日期时间函数,用于完成日期计算、格式转换、时区处理等常见操作,熟练掌握这些函数可以大幅提升日期相关查询的开发效率。本文将整理常用的 Oracle 日期时间函数,并结合示例说明其用法。

一、基础日期时间函数

1. SYSDATE

SYSDATE 用于返回当前数据库服务器的系统日期和时间,返回类型为 DATE,包含年、月、日、时、分、秒信息。

-- 查询当前系统日期时间
SELECT SYSDATE FROM DUAL;

2. SYSTIMESTAMP

SYSTIMESTAMP 返回当前数据库服务器的系统时间戳,包含时区信息,返回类型为 TIMESTAMP WITH TIME ZONE。

-- 查询当前系统时间戳
SELECT SYSTIMESTAMP FROM DUAL;

3. CURRENT_DATE 与 CURRENT_TIMESTAMP

CURRENT_DATE 返回当前会话时区的日期,CURRENT_TIMESTAMP 返回当前会话时区的时间戳,包含时区信息。

-- 查询当前会话时区的日期和时间戳
SELECT CURRENT_DATE, CURRENT_TIMESTAMP FROM DUAL;

二、日期运算相关函数

1. ADD_MONTHS

ADD_MONTHS(date, n) 用于在指定日期上增加 n 个月,n 可以为负数,表示减去对应月数。

-- 在当前日期上加3个月,减2个月
SELECT 
  ADD_MONTHS(SYSDATE, 3) AS add_3_months,
  ADD_MONTHS(SYSDATE, -2) AS minus_2_months
FROM DUAL;

2. MONTHS_BETWEEN

MONTHS_BETWEEN(date1, date2) 用于计算两个日期之间相差的月数,结果为正数表示 date1 晚于 date2,负数则相反。

-- 计算2024-01-01和2023-10-01之间相差的月数
SELECT MONTHS_BETWEEN(TO_DATE('2024-01-01', 'YYYY-MM-DD'), TO_DATE('2023-10-01', 'YYYY-MM-DD')) AS months_diff
FROM DUAL;

3. NEXT_DAY

NEXT_DAY(date, char) 用于返回指定日期之后的第一个星期几对应的日期,char 可以是星期几的英文全称、缩写或者数字(1代表周日,2代表周一,以此类推)。

-- 查询当前日期之后第一个周一的日期
SELECT NEXT_DAY(SYSDATE, 'MONDAY') AS next_monday FROM DUAL;
-- 使用数字表示,2代表周一
SELECT NEXT_DAY(SYSDATE, 2) AS next_monday_num FROM DUAL;

4. LAST_DAY

LAST_DAY(date) 用于返回指定日期所在月份的最后一天的日期。

-- 查询当前月份的最后一天
SELECT LAST_DAY(SYSDATE) AS last_day_of_month FROM DUAL;
-- 查询2024年2月的最后一天
SELECT LAST_DAY(TO_DATE('2024-02-01', 'YYYY-MM-DD')) AS feb_last_day FROM DUAL;

三、日期截取与四舍五入函数

1. TRUNC(日期截断)

TRUNC(date, fmt) 用于按照指定格式截断日期,保留 fmt 指定的时间粒度,后面的时间部分设为最小值(如年截断则月日设为1月1日,时截断则分秒设为0)。

-- 按年截断,返回当年1月1日
SELECT TRUNC(SYSDATE, 'YEAR') AS trunc_by_year FROM DUAL;
-- 按月截断,返回当月1日
SELECT TRUNC(SYSDATE, 'MONTH') AS trunc_by_month FROM DUAL;
-- 按天截断,返回当天0点
SELECT TRUNC(SYSDATE, 'DD') AS trunc_by_day FROM DUAL;
-- 按小时截断,返回当前小时的0分0秒
SELECT TRUNC(SYSDATE, 'HH') AS trunc_by_hour FROM DUAL;

2. ROUND(日期四舍五入)

ROUND(date, fmt) 用于按照指定格式对日期进行四舍五入,例如按月四舍五入时,如果日期超过当月15日,则返回下月1日,否则返回当月1日。

-- 按年月四舍五入,假设当前日期为2024-06-20,返回2024-07-01;如果是2024-06-10,返回2024-06-01
SELECT ROUND(SYSDATE, 'MONTH') AS round_by_month FROM DUAL;
-- 按年四舍五入,超过6月则返回下一年1月1日,否则返回本年1月1日
SELECT ROUND(SYSDATE, 'YEAR') AS round_by_year FROM DUAL;

四、日期格式转换函数

1. TO_DATE

TO_DATE(char, fmt) 用于将字符串按照指定格式转换为 DATE 类型,fmt 为日期格式模型。

-- 将字符串转换为日期类型
SELECT TO_DATE('2024-05-20 14:30:25', 'YYYY-MM-DD HH24:MI:SS') AS converted_date FROM DUAL;

2. TO_CHAR

TO_CHAR(date, fmt) 用于将日期类型按照指定格式转换为字符串,常用于日期的展示和格式化输出。

-- 将当前日期转换为指定格式的字符串
SELECT TO_CHAR(SYSDATE, 'YYYY年MM月DD日 HH24时MI分SS秒') AS formatted_date FROM DUAL;
-- 提取年份、月份、日
SELECT 
  TO_CHAR(SYSDATE, 'YYYY') AS year,
  TO_CHAR(SYSDATE, 'MM') AS month,
  TO_CHAR(SYSDATE, 'DD') AS day
FROM DUAL;

五、时区相关函数

1. FROM_TZ

FROM_TZ(timestamp, timezone) 用于将时间戳和时区组合成 TIMESTAMP WITH TIME ZONE 类型。

-- 构造带时区的时间戳
SELECT FROM_TZ(TIMESTAMP '2024-05-20 10:00:00', 'Asia/Shanghai') AS tz_timestamp FROM DUAL;

2. NEW_TIME

NEW_TIME(date, timezone1, timezone2) 用于将 date 从 timezone1 时区转换为 timezone2 时区的时间,返回 DATE 类型。

-- 将当前时间从上海时区转换为东京时区
SELECT NEW_TIME(SYSDATE, 'AST', 'JST') AS tokyo_time FROM DUAL;

六、常用日期计算场景示例

以下是几个实际开发中常见的日期计算场景示例:

  • 计算两个日期之间相差的天数:直接两个日期相减即可,Oracle 中日期相减返回相差的天数(可带小数,表示不足一天的小时分秒)

  • 计算指定日期所在年份的天数:使用 ADD_MONTHS 计算下一年1月1日,再减去当前年份1月1日

  • 判断某一年是否为闰年:如果2月最后一天是29日则为闰年

-- 计算2024-01-01到2024-12-31相差的天数
SELECT TO_DATE('2024-12-31', 'YYYY-MM-DD') - TO_DATE('2024-01-01', 'YYYY-MM-DD') AS days_diff FROM DUAL;

-- 计算2024年全年的天数
SELECT 
  ADD_MONTHS(TRUNC(TO_DATE('2024-01-01', 'YYYY-MM-DD'), 'YEAR'), 12) 
  - TRUNC(TO_DATE('2024-01-01', 'YYYY-MM-DD'), 'YEAR') AS year_days
FROM DUAL;

-- 判断2024年是否为闰年
SELECT 
  CASE 
    WHEN TO_CHAR(LAST_DAY(TO_DATE('2024-02-01', 'YYYY-MM-DD')), 'DD') = '29' THEN '是闰年'
    ELSE '不是闰年'
  END AS is_leap_year
FROM DUAL;

七、注意事项

使用 Oracle 日期时间函数时需要注意以下几点:

  • DATE 类型默认只显示日期部分,时间部分如果需要展示需要使用 TO_CHAR 转换

  • 进行日期运算时,要确保参与运算的字段或值为日期时间类型,避免隐式转换导致的错误

  • 时区相关函数使用时要注意数据库和会话的时区设置,避免时间偏差

  • 格式模型中的字母大小写敏感,例如 HH24 表示24小时制,HH 表示12小时制,MI 表示分钟,MM 表示月份,容易混淆的要注意区分

Oracle日期函数 时间处理函数 TO_CHAR ADD_MONTHS SYSDATE

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。