符合中国人习惯的oracle取周的日期函数

本文介绍了一种在Oracle中自定义函数的方法,该函数能够根据中国的习惯按周进行加班时数统计,即周一为每周的第一天,周日为最后一天,并直接返回易于理解的日期范围格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     最近在帮HR抓加班记录的统计数据。HR希望能by周统计加班时数。但Oracle的日期函数计算周时是周日算第一天,周六算最后一天。而中国人的习惯是周一算第一天,周日算最后一天。而且,Oracle的函数返回的是第几周,是个数字,HR还要再根据数据推算是那个日期段。自己编写了一个符合我们要求的小函数,返回值也科学很多,呵呵!

FUNCTION get_wk (p_date IN DATE)

      RETURN VARCHAR2

   IS

      v_wk   VARCHAR2 (30);

      v_n    NUMBER;

   BEGIN

      SELECT TO_NUMBER (TO_CHAR (p_date, 'D'))

        INTO v_n

        FROM DUAL;

 

      IF v_n = 1

      THEN

         v_wk :=

               TO_CHAR (p_date - 6, 'YYYY/MM/DD')

            || '-'

            || TO_CHAR (p_date, 'YYYY/MM/DD');

      ELSE

         v_wk :=

               TO_CHAR (p_date + (7 - (5 + v_n)), 'YYYY/MM/DD')

            || '-'

            || TO_CHAR (p_date + (7 - (5 + v_n)) + 6, 'YYYY/MM/DD');

      END IF;

 

      RETURN v_wk;

   END;

转载于:https://www.cnblogs.com/kevinsun/archive/2013/06/06/3121055.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值