`

Oracle中几个日期相关的计算

 
阅读更多

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'));    --上月最后一天

 

 

1
0
分享到:
评论

相关推荐

    Oracle 获得某日期属于该前月中的第几个自然周

    在Oracle数据库中,计算某个日期属于其前一个月中的第几个自然周是一项常见的需求,这在数据分析、报表生成或业务逻辑处理中很有用。这个任务可以通过编写一个自定义函数来实现,例如提供的`to_week_by_month.fnc`...

    在oracle中处理日期大全

    在 Oracle 中,我们可以使用 `-` 运算符来计算两个日期之间的天数。例如: `SELECT FLOOR(SYSDATE - TO_DATE('20020405', 'YYYYMMDD')) FROM DUAL;` 这条语句将计算当前日期和 `20020405` 之间的天数。 时间为 ...

    Oracle 获得某日期属于一年中的第几个自然周

    标题“Oracle 获取某日期属于一年中的第几个自然周”指的是在Oracle数据库系统中,通过SQL查询来确定一个特定日期在当年是第几周的问题。在实际业务中,这样的功能可能用于统计、报告或者数据分析,例如,公司可能...

    Oracle计算连续天数,计算连续时间,Oracle连续天数统计

    Oracle中的日期函数如`SYSDATE`获取当前系统日期,`ADD_MONTHS`、`TRUNC`用于日期的加减和截断,`NEXT_DAY`则可以得到下一个特定星期的日期。在处理连续天数时,`DATE`和`INTERVAL`数据类型也是常用工具。 2. **自...

    oracle语句查询两个日期之间星期六、星期日的天数

    oracle语句查询两个日期之间星期六、星期日的天数

    oracle_日期_加减方法

    在Oracle数据库中,日期操作是常见的SQL查询任务,特别是在处理历史数据或进行时间相关的分析时。Oracle提供了丰富的函数来帮助用户对日期进行加减操作,这些功能强大且灵活的函数使得开发者能更精确地处理时间数据...

    ORACLE sql 星期几 一个月的第几天等 方法

    在这个资源中,我们将讨论如何使用 Oracle SQL 来获取星期几、一个月的第几天、一个年的第几天等信息。 一、获取星期几 Oracle SQL 提供了多种方式来获取星期几,下面是一些常见的方法: 1. 使用 TO_CHAR 函数 ...

    数据库oracle中日期处理

    Oracle提供了丰富的函数和操作符来处理日期,使得我们可以轻松地完成诸如计算星期几、两个日期之间的天数等常见需求。以下是一些关于Oracle日期处理的关键知识点: 1. **日期数据类型**: Oracle数据库中的日期...

    Oracle中几个关于日期方面的SQL实例

    以上示例展示了Oracle数据库在处理日期和时间方面的一些基本操作,包括获取当前日期、获取日期在一个月或一年中的位置、日期的加减运算以及判断闰年等。这些函数和表达式在实际的数据库查询和报表生成中非常常用,...

    oracle日期函数全面总结

    3. **MONTHS_BETWEEN(date1, date2)**: 计算两个日期之间的月份数,考虑到了日历中的天数差异。返回值可能为浮点数,表示精确到天的差值。 ```sql SELECT MONTHS_BETWEEN('2022-01-01', '2022-12-31') FROM DUAL; ...

    oracle 几个日期出来

    根据提供的文件信息,我们可以总结出以下关于Oracle数据库中日期处理的相关知识点: ### 1. 获取当前日期是一周中的第几天 在Oracle中,可以使用`to_char()`函数结合日期格式来获取当前日期是一周中的第几天。一周...

    ORACLE中日期和时间函数汇总

    * 计算两个日期之间的天数:`SELECT FLOOR(SYSDATE - TO_DATE('20020405', 'YYYYMMDD')) FROM DUAL;` * 查找某个日期是星期几:`SELECT TO_CHAR(TO_DATE('2002-08-26', 'YYYY-MM-DD'), 'DAY') FROM DUAL;` * 查找...

    计算两个日期之间周末的天数和工作日天数

    本人编写,通过自己定义的函数计算两个日期之间周末的天数和工作日天数,经过测试,非常好用

    Oracle sql查询当前月的所有日期

    在Oracle数据库环境中,进行日期相关的查询是常见的需求之一。...同时,本文还介绍了几个Oracle SQL中处理日期的重要函数和技巧,希望对你有所帮助。在实际应用中,根据具体需求灵活运用这些技术可以大大提高工作效率。

    oracle日期处理完全版

    - 使用 `-` 运算符可以计算两个日期之间的天数差,如 `floor(sysdate - to_date('20020405','yyyymmdd'))`。 5. **NULL日期处理**: - 当需要表示日期为空时,使用 `TO_DATE(NULL)`。 6. **BETWEEN操作符**: -...

    oracle 日期处理 总结

    `date1 - date2`可以直接计算两个日期之间的天数差。 6. **获得两个日期之间的月份数量** 使用`months_between(date1, date2)`函数可以得到两个日期间的月份数。 7. **使用ADD_MONTHS()函数在月份上进行加减法...

    oracle日期处理函数大全

    4. **计算两个日期之间的天数**:使用`FLOOR`函数可以计算两个日期之间的整数天数,如`FLOOR(SYSDATE - TO_DATE('20020405', 'YYYYMMDD'))`。 5. **NULL日期处理**:在Oracle中,日期字段的NULL值不能直接与其他...

    oracle日期操作举例

    这些示例分别展示了如何将日期按照不同的格式输出,包括标准日期时间格式、年份中的第几天等。 #### 三、日期转换 在Oracle中,还可以实现日期之间的转换。 **1. 字符串转日期** ```sql SELECT TO_DATE('2003-10-...

    ORACLE常用日期函数集合

    除了格式化日期外,Oracle还提供了多种日期操作函数,用于进行更复杂的日期计算。 1. **截取日期** - `trunc()`: 可以根据不同的级别截取日期。例如: ```sql SELECT trunc(sysdate, 'Q') FROM dual; -- 截取到...

Global site tag (gtag.js) - Google Analytics