oracle 转换一个日期时间对应的半年(上半年⼀下半年)的第一天和最后一天

2025-04-25 08:30:58
推荐回答(4个)
回答1:

试试下面语句:当天日期小于7月时取当年的第一天,当天日期大于6月时取7月的第一天。
select case when to_char(sysdate,'mm')<7 then trunc(sysdate,'YYYY') else
trunc(add_months(sysdate,-to_char(sysdate,'mm')+7),'mm') end from dual;

回答2:

SELECT
CASE WHEN
MOD(EXTRACT(MONTH FROM TRUNC( SYSDATE, 'Q' )) , 2) = 1 THEN
TRUNC( SYSDATE, 'Q' )
ELSE
ADD_MONTHS( TRUNC( SYSDATE, 'Q' ), -3)
END
FROM
dual;

有点复杂

算法是:
判断 本季度第一天是几月, 月份是 奇数的 ( 1月 7 月), 那么 就是 要的结果了
如果月份是偶数的, 那么 在此基础上, 向前减少3月.

回答3:

试试这样吧:
to_date(DECODE(to_char(sysdate,'yyyy-mm'),
'2012-01','2012-01-01',
'2012-02','2012-01-01',
'2012-03','2012-01-01',
'2012-04','2012-01-01',
'2012-05','2012-01-01',
'2012-06','2012-01-01',
'2012-07-01'
),'yyyy-mm-dd')

回答4:

add_months(trunc(sysdate,'yyyy'),case when to_number(to_date(sysdate,'mm'))>6 then 6 else 0 end)