Oracle中几个日期相关的计算
1. 计算当前是第几周
有两种方式:
select to_char(sysdate,'ww') from dual; --ww的算法为每年1月1日为第一周开始,date+6为每一周结尾 --例如:20050101为第一周的第一天,而第一周的最后一天为20050101+6=20050107 --这里1月1日不一定为周一,月7日也不一定为周日 select to_char(sysdate,'iw') from dual; --iw的算法为星期一至星期日算一周,且每年的第一个星期一为第一周, --这种算法,需要关注跨年的那个一周: --假如跨年的一周,大部分时间属于新年,则上一年的最后几天也算新年的第一周 --比如20130101 是周二,那么2012年的最后几天 都属于2013年的第一周 select to_char(to_date('20130101','yyyymmdd'),'iw') from dual; --01 select to_char(to_date('20121231','yyyymmdd'),'iw') from dual; --01 --假如跨年一周,大部分时间在上年,则跨年周中新年的前几天 属于上年的最后一周 --2020年12月31号是周4,这样跨年的那一周有4天在2020年,所以上面的输出为53 select to_char(to_date('20201231','yyyymmdd'),'iw') from dual; --53 select to_char(to_date('20210101','yyyymmdd'),'iw') from dual; --53 --2021年的前面几天 还是属于 上年的最后一周(53)周
2. 计算上周一 和 上周日的日期
根据中国习惯,一周从周一到周日.
prompt 'week_date_beg_end' create or replace procedure week_date_beg_end ( the_date varchar2 ) as a_date date; v_i_tmp number(10); v_tmp_date_beg number(10); v_tmp_date_end number(10); begin a_date := to_date(the_date,'yyyymmdd'); v_i_tmp := to_number(to_char(a_date,'D')); --指定日期的星期,1-7表示周日 - 周六 if v_i_tmp = 1 then -- 表示指定日期是周日 v_i_tmp := 6; -- v_i_tmp 表示指定日期 距离本周一的天数 else v_i_tmp := v_i_tmp - 2; -- v_i_tmp 表示指定日期 距离本周一的天数 end if; v_tmp_date_beg := to_number(to_char(a_date - v_i_tmp - 7,'YYYYmmDD')); --指定日期 的 上周一 v_tmp_date_end := to_number(to_char(a_date - v_i_tmp - 1,'YYYYmmDD')); --指定日期 的 上周日 dbms_output.put_line(v_tmp_date_beg); dbms_output.put_line(v_tmp_date_end); end; / --pl sql developer中测试 set serverout on; exec week_date_beg_end('20130505'); -- 输出为: -- 20130422 -- 20130428 -- PL/SQL procedure successfully completed
另,博客 http://blog.csdn.net/limenghua9112/article/details/11193819?reload
中提供的方法不对
-- 这样取的是 在一周内第几天,是以周日为开始的
select to_char(to_date('20130906','yyyymmdd'),'d') from dual;
--结果:6 注释:2013.09.06是周五,为本周的第六天
select to_char(sysdate+(2-to_char(sysdate,'d'))-7,'yyyymmdd') from dual;---上周一
select to_char(sysdate+(2-to_char(sysdate,'d'))-1,'yyyymmdd') from dual;---上周日
--这种算法中,当当前日期为周日时,算出来的上周日还是当天,貌似不对.
--比如,20130505是周日,下面的语句输出的还是 20130505
select to_char(to_date('20130505','yyyymmdd')+(2-to_char(to_date('20130505','yyyymmdd'),'d'))-1,'yyyymmdd') from dual;
3. 计算 上月的第一天 和 最后一天 日期
v_tmp_date_beg := to_number(to_char(last_day(add_months(sysdate,-2)) + 1,'yyyymmdd')); --上月第一天 v_tmp_date_end := to_number(to_char(last_day(add_months(sysdate,- 1)),'yyyymmdd')); --上月最后一天
相关推荐
在Oracle数据库中,计算某个日期属于其前一个月中的第几个自然周是一项常见的需求,这在数据分析、报表生成或业务逻辑处理中很有用。这个任务可以通过编写一个自定义函数来实现,例如提供的`to_week_by_month.fnc`...
在 Oracle 中,我们可以使用 `-` 运算符来计算两个日期之间的天数。例如: `SELECT FLOOR(SYSDATE - TO_DATE('20020405', 'YYYYMMDD')) FROM DUAL;` 这条语句将计算当前日期和 `20020405` 之间的天数。 时间为 ...
标题“Oracle 获取某日期属于一年中的第几个自然周”指的是在Oracle数据库系统中,通过SQL查询来确定一个特定日期在当年是第几周的问题。在实际业务中,这样的功能可能用于统计、报告或者数据分析,例如,公司可能...
Oracle中的日期函数如`SYSDATE`获取当前系统日期,`ADD_MONTHS`、`TRUNC`用于日期的加减和截断,`NEXT_DAY`则可以得到下一个特定星期的日期。在处理连续天数时,`DATE`和`INTERVAL`数据类型也是常用工具。 2. **自...
oracle语句查询两个日期之间星期六、星期日的天数
在Oracle数据库中,日期操作是常见的SQL查询任务,特别是在处理历史数据或进行时间相关的分析时。Oracle提供了丰富的函数来帮助用户对日期进行加减操作,这些功能强大且灵活的函数使得开发者能更精确地处理时间数据...
在这个资源中,我们将讨论如何使用 Oracle SQL 来获取星期几、一个月的第几天、一个年的第几天等信息。 一、获取星期几 Oracle SQL 提供了多种方式来获取星期几,下面是一些常见的方法: 1. 使用 TO_CHAR 函数 ...
Oracle提供了丰富的函数和操作符来处理日期,使得我们可以轻松地完成诸如计算星期几、两个日期之间的天数等常见需求。以下是一些关于Oracle日期处理的关键知识点: 1. **日期数据类型**: Oracle数据库中的日期...
以上示例展示了Oracle数据库在处理日期和时间方面的一些基本操作,包括获取当前日期、获取日期在一个月或一年中的位置、日期的加减运算以及判断闰年等。这些函数和表达式在实际的数据库查询和报表生成中非常常用,...
3. **MONTHS_BETWEEN(date1, date2)**: 计算两个日期之间的月份数,考虑到了日历中的天数差异。返回值可能为浮点数,表示精确到天的差值。 ```sql SELECT MONTHS_BETWEEN('2022-01-01', '2022-12-31') FROM DUAL; ...
根据提供的文件信息,我们可以总结出以下关于Oracle数据库中日期处理的相关知识点: ### 1. 获取当前日期是一周中的第几天 在Oracle中,可以使用`to_char()`函数结合日期格式来获取当前日期是一周中的第几天。一周...
* 计算两个日期之间的天数:`SELECT FLOOR(SYSDATE - TO_DATE('20020405', 'YYYYMMDD')) FROM DUAL;` * 查找某个日期是星期几:`SELECT TO_CHAR(TO_DATE('2002-08-26', 'YYYY-MM-DD'), 'DAY') FROM DUAL;` * 查找...
本人编写,通过自己定义的函数计算两个日期之间周末的天数和工作日天数,经过测试,非常好用
在Oracle数据库环境中,进行日期相关的查询是常见的需求之一。...同时,本文还介绍了几个Oracle SQL中处理日期的重要函数和技巧,希望对你有所帮助。在实际应用中,根据具体需求灵活运用这些技术可以大大提高工作效率。
- 使用 `-` 运算符可以计算两个日期之间的天数差,如 `floor(sysdate - to_date('20020405','yyyymmdd'))`。 5. **NULL日期处理**: - 当需要表示日期为空时,使用 `TO_DATE(NULL)`。 6. **BETWEEN操作符**: -...
`date1 - date2`可以直接计算两个日期之间的天数差。 6. **获得两个日期之间的月份数量** 使用`months_between(date1, date2)`函数可以得到两个日期间的月份数。 7. **使用ADD_MONTHS()函数在月份上进行加减法...
4. **计算两个日期之间的天数**:使用`FLOOR`函数可以计算两个日期之间的整数天数,如`FLOOR(SYSDATE - TO_DATE('20020405', 'YYYYMMDD'))`。 5. **NULL日期处理**:在Oracle中,日期字段的NULL值不能直接与其他...
这些示例分别展示了如何将日期按照不同的格式输出,包括标准日期时间格式、年份中的第几天等。 #### 三、日期转换 在Oracle中,还可以实现日期之间的转换。 **1. 字符串转日期** ```sql SELECT TO_DATE('2003-10-...
除了格式化日期外,Oracle还提供了多种日期操作函数,用于进行更复杂的日期计算。 1. **截取日期** - `trunc()`: 可以根据不同的级别截取日期。例如: ```sql SELECT trunc(sysdate, 'Q') FROM dual; -- 截取到...