首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >26ai新特性实战:DATEDIFF函数

26ai新特性实战:DATEDIFF函数

作者头像
胖头鱼的鱼缸
发布2026-07-21 15:17:30
发布2026-07-21 15:17:30
40
举报

胖头鱼的技术专栏-449 26ai新特性实战:DATEDIFF函数(20260720)

代码语言:javascript
复制
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE

10年+数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家
圈内拥有“总监”称号,非著名社恐(社交恐怖分子)

全网同名:胖头鱼的鱼缸
ITPUB:yhw1809
除授权转载并标明出处外,均为“非法”抄袭
914fcc7ad57defa7868c3be1ca7fb4f5.jpg
914fcc7ad57defa7868c3be1ca7fb4f5.jpg

前面针对Oracle AI Database 23.26.2中便于本地演示的新特性已经完成了,接下来将使用若干期演示23.26.1的新特性。

特性介绍

Oracle AI Database 23.26.1引入了DATEDIFF函数,用于计算两个日期之间的差异。该函数返回两个DATE或TIMESTAMP值之间按指定单位(天、月、年等)计算的数量差。

语法介绍

代码语言:javascript
复制
DATEDIFF(unit, date1, date2)

支持的日期单位(unit):

  • DAY - 按天计算差异,返回两个日期之间的天数
  • MONTH - 按月计算差异,返回两个日期之间的月数差
  • YEAR - 按年计算差异,返回两个日期之间的年数差

参数说明:

  • unit:日期单位,可用单引号字符串指定,如 ‘DAY’、‘MONTH’、‘YEAR’
  • date1:第一个日期(被减数),可以是DATE或TIMESTAMP类型
  • date2:第二个日期(减数),可以是DATE或TIMESTAMP类型
  • 结果 = date1 - date2,按照指定单位计算

行为细节:

  • DAY模式下计算精确的天数差(小数点后包含时分秒差异)
  • MONTH模式下按月份计算,不完整月份按比例折算
  • YEAR模式下按年份计算,不完整年份按比例折算
  • 支持DATE和TIMESTAMP类型
  • 当使用TIMESTAMP类型时,计算结果更精确

使用限制

  • unit 参数必须是有效的日期单位(DAY/MONTH/YEAR)
  • date1 和 date2 必须是有效的日期或时间戳类型
  • 不支持时区时间戳(TIMESTAMP WITH TIME ZONE)

适用场景

  • 报表分析:计算订单处理时间、项目工期等
  • 年龄计算:根据出生日期计算精确年龄
  • 财务分析:计算投资持有天数、贷款月数等
  • 数据质量检查:验证日期范围内的数据分布
  • 销售分析:比较不同产品的最早和最晚销售日期之间的时间跨度
  • 日志分析:计算事件之间的时间间隔

实战演示

同之前一样,使用用户NFTEST,已授权DB_DEVELOPER_ROLE角色,测试操作均在NFTEST用户下执行。

创建测试表并添加测试数据

代码语言:javascript
复制
CREATE TABLE nwc_sales (
  sale_id  NUMBER PRIMARY KEY,
  product  VARCHAR2(30),
  region   VARCHAR2(30),
  amount   NUMBER,
  sale_date DATE
);

INSERT INTO nwc_sales VALUES (1, 'Widget', 'East', 100, DATE'2026-01-15');
INSERT INTO nwc_sales VALUES (2, 'Widget', 'West', 150, DATE'2026-01-20');
INSERT INTO nwc_sales VALUES (3, 'Gadget', 'East', 200, DATE'2026-02-10');
INSERT INTO nwc_sales VALUES (4, 'Gadget', 'West', 120, DATE'2026-02-15');
INSERT INTO nwc_sales VALUES (5, 'Widget', 'East',  80, DATE'2026-03-01');
INSERT INTO nwc_sales VALUES (6, 'Gadget', 'West', 300, DATE'2026-03-05');

COMMIT;
image.png
image.png

测试1:日的DATEDIFF

代码语言:javascript
复制
SELECT
  sale_id, product, region, sale_date,
DATEDIFF(DAY, SYSDATE, sale_date) AS days_since_sale
FROM nwc_sales
ORDER BY sale_id;
image.png
image.png

测试2:月的DATEDIFF

代码语言:javascript
复制
SELECT
  sale_id, product, region, sale_date,
DATEDIFF(MONTH, sale_date, DATE'2026-03-05') AS months_to_mar5
FROM nwc_sales
ORDER BY sale_id;
image.png
image.png

测试3:年的DATEDIFF

代码语言:javascript
复制
SELECT
  sale_id, product, region, sale_date,
DATEDIFF(YEAR, sale_date, DATE'2027-01-01') AS years_to_2027
FROM nwc_sales
ORDER BY sale_id;
image.png
image.png

测试4:TIMESTAMP值的DATEDIFF

代码语言:javascript
复制
SELECT
DATEDIFF(DAY,
TIMESTAMP'2026-01-15 08:30:00',
TIMESTAMP'2026-01-15 20:45:00')  AS partial_day_diff,
DATEDIFF(DAY,
TIMESTAMP'2026-01-15 00:00:00',
TIMESTAMP'2026-02-15 00:00:00')  AS full_month_days,
DATEDIFF(MONTH,
TIMESTAMP'2026-01-15 00:00:00',
TIMESTAMP'2026-06-15 00:00:00')  AS month_diff
FROM dual;
image.png
image.png

测试5:基于每个产品使用DATEDIFF

代码语言:javascript
复制
WITH product_dates AS (
SELECT
    product,
MIN(sale_date) AS earliest_sale,
MAX(sale_date) AS latest_sale
FROM nwc_sales
GROUPBY product
)
SELECT
  product,
  earliest_sale,
  latest_sale,
DATEDIFF(DAY, latest_sale, earliest_sale)   AS day_span,
DATEDIFF(MONTH, latest_sale, earliest_sale) AS month_span,
DATEDIFF(YEAR, latest_sale, earliest_sale)  AS year_span
FROM product_dates
ORDER BY product;
image.png
image.png

测试6:在WHERE子句中使用DATEDIFF

代码语言:javascript
复制
SELECT sale_id, product, sale_date,
DATEDIFF(DAY, sale_date, DATE'2026-03-01') AS days_before_mar1
FROM nwc_sales
WHERE DATEDIFF(DAY, sale_date, DATE'2026-03-01') <= 30
ORDER BY sale_date;
image.png
image.png

总结

本期对Oracle AI Database 26ai,23.26.1版本新引入的DATEDIFF函数新特性进行了完整介绍与实战演示,这是一个在时间上非常实用的开发增强。

老规矩,知道写了些啥。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 胖头鱼的鱼缸 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 胖头鱼的技术专栏-449 26ai新特性实战:DATEDIFF函数(20260720)
    • 特性介绍
    • 语法介绍
    • 使用限制
    • 适用场景
    • 实战演示
      • 创建测试表并添加测试数据
      • 测试1:日的DATEDIFF
      • 测试2:月的DATEDIFF
      • 测试3:年的DATEDIFF
      • 测试4:TIMESTAMP值的DATEDIFF
      • 测试5:基于每个产品使用DATEDIFF
      • 测试6:在WHERE子句中使用DATEDIFF
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档