`
azrael6619
  • 浏览: 583313 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

oracle 获取周末 及trunc的用法

阅读更多

一、trunc的用法

1.trunc(for dates)
        trunc函数为指定元素而截去的日期值。
        其具体的语法格式如下:
        trunc(date[,fmt])
        其中:
        date        一个日期值
        fmt                日期格式,该日期将由指定的元素格式所截去。忽略他则由最近的日期截去
例如:

select   trunc(sysdate, 'mm')   from   dual;    --截取到“月”,如果传入的是:'2010-11-01',则需先转化为date

 

2.trunc(for number)
        trunc函数返回处理后的数值,其工作机制和round函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。
        其具体的语法格式如下
        trunc(number[,decimals])
        其中:
        number        待做截取处理的数值
        decimals        指明需保留小数点后面的位数。可选项,忽略他则截去所有的小数部分
例如:
        trunc(89.985,2)=89.98
        trunc(89.985)=89
        trunc(89.985,-1)=80
        注意:第二个参数能为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。

 

二、oracle获取周末

 

1、获取当天是礼拜几:select to_char(sysdate,'d') from dual;  --礼拜天为1,礼拜一为2,类推

2、获取 两个时间段间的 工作日:

select (trunc(&end_dt - &start_dt) -
         ((case
         WHEN (8 - to_number(to_char(&start_dt,'D'))) > trunc(&end_dt - &start_dt) + 1 THEN 0
         ELSE
          trunc((trunc(&end_dt - &start_dt) -
                (8 - to_number(to_char(&start_dt,'D'))))/7) + 1 END) +
         (case
         WHEN mod(8 - to_char(&start_dt, 'D'), 7) > trunc(&end_dt - &start_dt) - 1 THEN 0
         ELSE
          trunc((trunc(&end_dt - &start_dt) - (mod(8 - to_char(&start_dt,'D'),7) + 1))/7) + 1  END)))
         as workingdays
  from dual

下面的sql可以直接运行:

select (trunc(to_date('2010-11-11','yyyy-mm-dd') - to_date('2010-11-07','yyyy-mm-dd')) -
         ((case
         WHEN (8 - to_number(to_char(to_date('2010-11-07','yyyy-mm-dd'),'D'))) > trunc(to_date('2010-11-11','yyyy-mm-dd') - to_date('2010-11-07','yyyy-mm-dd')) + 1 THEN 0
         ELSE
          trunc((trunc(to_date('2010-11-11','yyyy-mm-dd') - to_date('2010-11-07','yyyy-mm-dd')) -
                (8 - to_number(to_char(to_date('2010-11-07','yyyy-mm-dd'),'D'))))/7) + 1 END) +
         (case
         WHEN mod(8 - to_char(to_date('2010-11-07','yyyy-mm-dd'), 'D'), 7) > trunc(to_date('2010-11-11','yyyy-mm-dd') - to_date('2010-11-07','yyyy-mm-dd')) - 1 THEN 0
         ELSE
          trunc((trunc(to_date('2010-11-11','yyyy-mm-dd') - to_date('2010-11-07','yyyy-mm-dd')) - (mod(8 - to_char(to_date('2010-11-07','yyyy-mm-dd'),'D'),7) + 1))/7) + 1  END)))
         as workingdays
  from dual
 

 

分享到:
评论

相关推荐

    Oracle 获取上周一到周末日期的查询sql语句

    3. `trunc(sysdate,'iw') - 7` 和 `trunc(sysdate,'iw') - 1`:使用`TRUNC`函数和减法操作获取上周一和上周日。 4. `to_char(trunc(sysdate,'iw') - 7,'yyyymmdd')` 和 `to_char(trunc(sysdate,'iw') - 1,'yyyymmdd'...

    oracle函数得到下一个法定工作日期

    首先,Oracle提供了一些内置的日期函数,如`SYSDATE`获取当前日期,`ADD_MONTHS`增加月份,`TRUNC`截断日期到指定的日期部分。然而,这些函数并不直接支持判断是否为工作日或法定假日。因此,我们通常需要结合其他...

    取周一和周末

    ### Oracle数据库中获取指定周的周一和周末日期的方法 在Oracle数据库中,有时我们需要查询某个特定周的开始和结束日期,即周一和周末的日期。这在进行时间范围查询、数据统计等方面非常有用。本文将详细解析如何...

    oracle全套日期用法+函数大全

    除此之外,Oracle还提供了其他日期函数,如 `ADD_MONTHS`、`LAST_DAY`、`TRUNC` 等,用于增加或减少日期、获取月份最后一天以及截断日期到指定单位等操作。在进行日期操作时,确保正确使用NLS参数,以避免因地区设置...

    Oracle Date常用方法封装

    2. **日期运算**:Oracle提供了许多内置的日期函数,如ADD_MONTHS、NEXT_DAY、TRUNC等,用于进行日期的加减、找到下一个特定日期(如周末或节假日)以及截取日期的某一部分(如月份或年份)。例如: ```sql DECLARE ...

    Oracle 日期处理大全

    9. **日期函数**:Oracle还提供了其他日期函数,如 `ADD_MONTHS` 增加或减少月份,`TRUNC` 截断日期到指定单位,`EXTRACT` 提取日期或时间的某个部分,以及 `NEXT_DAY` 获取给定日期后的下一个指定天。 10. **日期...

    Oracle时间操作大全.docx

    - 这种方法适用于假设周末是非工作日的情况,实际应用中可能需要考虑公共假期。 5. **时间段判断**: - `CASE` 语句可以用来判断当前时间属于一天中的哪个时段,如 `WHEN to_number(to_char(SYSDATE,'hh24')) ...

    oracle中日期的相关操作

    Oracle提供了方便的方法来增加或减少日期: - 增加5秒: `SYSDATE + (5/24/60/60)` - 增加5分钟: `SYSDATE + (5/24/60)` - 增加5小时: `SYSDATE + (5/24)` - 增加5天: `SYSDATE + 5` - 减少5个月: `ADD_MONTHS...

Global site tag (gtag.js) - Google Analytics