日期函数未返回预期的月份

问题描述 投票:0回答:2

我在 Oracle DB 中有以下 SQL,我预计会返回 2024 年 3 月 1 日 (01-MAR-24),但它返回的是 01-AUG-24

SELECT TRUNC(TRUNC (SYSDATE, 'MM') - 6, 'MM')
FROM dual

谁能告诉我为什么会这样?我想选择“X”个月前的第一天,并采用上述格式,但这并不符合我的预期。

sql oracle
2个回答
0
投票

您将日期截断到月初,然后减去 6 天,最后将值(现在是上个月)截断到该月初。

您可能想要的是

SELECT ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -6) FROM DUAL;

或:

SELECT TRUNC(SYSDATE, 'MM') - INTERVAL '6' MONTH FROM DUAL;

0
投票

TRUNC(SYSDATE, 'MM')
,将当前日期截断为当月的第一天。给定今天的日期
24-SEP-2024
,它将返回 01-SEP-2024。

TRUNC(SYSDATE, 'MM') - 6
,从当月的第一天减去 6 天。因此,从
01-SEP-2024
中减去 6 天将得到
26-AUG-2024

TRUNC(TRUNC(SYSDATE, 'MM') - 6, 'MM')
,将
26-AUG-2024
截断为该月的第一天。所以,
26-AUG-2024
变成了
01-AUG-2024


也许你需要,

SELECT TRUNC(ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -6), 'MM') ;

结果

01-MAR-24

ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -6)
,从当月的第一天减去 6 个月。

参见示例

© www.soinside.com 2019 - 2024. All rights reserved.