
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE
10年+数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家
圈内拥有“总监”称号,非著名社恐(社交恐怖分子)
全网同名:胖头鱼的鱼缸
ITPUB:yhw1809
除授权转载并标明出处外,均为“非法”抄袭

前面针对Oracle AI Database 23.26.2中便于本地演示的新特性已经完成了,接下来将使用若干期演示23.26.1的新特性。
Oracle AI Database 23.26.1引入了DATEDIFF函数,用于计算两个日期之间的差异。该函数返回两个DATE或TIMESTAMP值之间按指定单位(天、月、年等)计算的数量差。
DATEDIFF(unit, date1, date2)
支持的日期单位(unit):
参数说明:
行为细节:
同之前一样,使用用户NFTEST,已授权DB_DEVELOPER_ROLE角色,测试操作均在NFTEST用户下执行。
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;

SELECT
sale_id, product, region, sale_date,
DATEDIFF(DAY, SYSDATE, sale_date) AS days_since_sale
FROM nwc_sales
ORDER BY sale_id;

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;

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;

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;

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;

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;

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