一、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
分享到:
相关推荐
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提供了一些内置的日期函数,如`SYSDATE`获取当前日期,`ADD_MONTHS`增加月份,`TRUNC`截断日期到指定的日期部分。然而,这些函数并不直接支持判断是否为工作日或法定假日。因此,我们通常需要结合其他...
### Oracle数据库中获取指定周的周一和周末日期的方法 在Oracle数据库中,有时我们需要查询某个特定周的开始和结束日期,即周一和周末的日期。这在进行时间范围查询、数据统计等方面非常有用。本文将详细解析如何...
除此之外,Oracle还提供了其他日期函数,如 `ADD_MONTHS`、`LAST_DAY`、`TRUNC` 等,用于增加或减少日期、获取月份最后一天以及截断日期到指定单位等操作。在进行日期操作时,确保正确使用NLS参数,以避免因地区设置...
2. **日期运算**:Oracle提供了许多内置的日期函数,如ADD_MONTHS、NEXT_DAY、TRUNC等,用于进行日期的加减、找到下一个特定日期(如周末或节假日)以及截取日期的某一部分(如月份或年份)。例如: ```sql DECLARE ...
9. **日期函数**:Oracle还提供了其他日期函数,如 `ADD_MONTHS` 增加或减少月份,`TRUNC` 截断日期到指定单位,`EXTRACT` 提取日期或时间的某个部分,以及 `NEXT_DAY` 获取给定日期后的下一个指定天。 10. **日期...
- 这种方法适用于假设周末是非工作日的情况,实际应用中可能需要考虑公共假期。 5. **时间段判断**: - `CASE` 语句可以用来判断当前时间属于一天中的哪个时段,如 `WHEN to_number(to_char(SYSDATE,'hh24')) ...
Oracle提供了方便的方法来增加或减少日期: - 增加5秒: `SYSDATE + (5/24/60/60)` - 增加5分钟: `SYSDATE + (5/24/60)` - 增加5小时: `SYSDATE + (5/24)` - 增加5天: `SYSDATE + 5` - 减少5个月: `ADD_MONTHS...