解决 获取一个Oracle日期当月第一天 以及该整月日期的问题

本文介绍在Oracle数据库中如何使用SQL语句进行精确的日期筛选,包括整月和整年的数据查询方法。通过实例展示了当日期格式为字符串或date类型时,如何设置条件以获取特定月份或年度的数据记录。

1、案例:

--整月,如果日期格式为字符串:

select count(*) from tname where 
DDATE> = trunc(to_date('2019/7/2' , 'yyyy-mm-dd'), 'mm') and 
DDATE<ADD_MONTHS(trunc(to_date('2019/7/2' , 'yyyy-mm-dd'), 'mm'),1)

--整月,如果日期格式为date:

select count(*) from tname where 
DDATE> = trunc('2019/7/2' , 'mm') and 
DDATE<ADD_MONTHS(trunc('2019/7/2' , 'mm'),1)

 

--整年

DDATE> = trunc(to_date('2019/7/5' , 'yyyy-mm-dd'), 'yyyy') and 
DDATE<ADD_MONTHS(trunc(to_date('2019/7/20' , 'yyyy-mm-dd'), 'yyyy'),12)

 

Oracle获取日期列最后一天日期可以使用 `LAST_DAY` 函数,该函数能够返回给定日期所在月份的最后一天。以下为几种不同场景下的使用示例: ### 从系统日期获取本月最后一天 ```sql SELECT to_char(LAST_DAY(SYSDATE), 'yyyy-mm-dd') FROM dual; ``` 此代码会返回当前月份的最后一天,以 `yyyy-mm-dd` 格式显示。 ### 从日期获取每个日期所在月的最后一天 若有一个名为 `your_table` 的表,其中包含 `date_column` 日期列,就可以通过以下语句获取该列每个日期所在月的最后一天: ```sql SELECT your_column, to_char(LAST_DAY(date_column), 'yyyy-mm-dd') AS last_day_of_month FROM your_table; ``` 上述代码会返回 `your_column` 和对应的每个日期所在月的最后一天(以 `yyyy-mm-dd` 格式显示)。 ### 获取上个季度或其他特殊日期最后一天 可以结合 `LAST_DAY` 和 `ADD_MONTHS` 函数来获取上个季度或其他特殊日期最后一天。比如,获取上个季度最后一天的示例: ```sql -- 获取上个月最后一天(假设上个季度最后一个月) SELECT to_char(LAST_DAY(ADD_MONTHS(SYSDATE, -3)), 'yyyy-mm-dd') FROM dual; ``` 这段代码会返回上个季度最后一个月的最后一天,以 `yyyy-mm-dd` 格式显示。 ### 获取本月第一天和最后一天 ```sql -- 获取本月第一天 SELECT to_char(trunc(sysdate, 'mm'), 'yyyy-mm-dd') as first_day_of_month FROM dual; -- 获取本月最后一天 SELECT to_char(last_day(sysdate), 'yyyy-mm-dd') as last_day_of_month FROM dual; ``` 这些代码分别返回本月的第一天和最后一天,以 `yyyy-mm-dd` 格式显示 [^2]。 ### 注意事项 `ADD_MONTHS` 函数存在一个需要注意的点,如果日期当月最后一天,那么无论取 `+1` 还是 `-1`,都是取上个月或下个月的最后一天,示例如下: ```sql SELECT add_months(to_date('20240930', 'yyyymmdd'), -1) FROM dual; ``` 此代码会返回 `20240831`,而非 `20240830` [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值