oracle trunc(sysdate ,'dd') 日期

本文介绍Oracle数据库中如何使用SQL语句进行日期时间的截取、加减运算及格式化输出,包括利用TRUNC函数获取指定粒度的日期、通过加减分数秒数实现时间上的精确调整。

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

select trunc(sysdate ,'dd') from dual ;   --  2007-9-19

select trunc(sysdate ,'yyyy') from dual ;   --2007-1-1

select trunc(sysdate ,'mm') from dual ;   --2007-9-1



begin 
dbms_output.put_line( to_char ( (sysdate)    , 'yyyy-mm-dd hh24:mi:ss'  ) ) ;
dbms_output.put_line( to_char ( (sysdate)+ 1/24/60/10   , 'yyyy-mm-dd hh24:mi:ss'  ) ) ;
dbms_output.put_line( to_char (  ((sysdate)+ 10 / ( 24*60*60 )   )  , 'yyyy-mm-dd hh24:mi:ss'  ) ) ;

dbms_output.put_line( to_char (  trunc((sysdate)+ 10 / ( 24*60*60 )   )  , 'yyyy-mm-dd hh24:mi:ss'  ) ) ;

end ; 
/

 

 


begin 
dbms_output.put_line( '当前时间 '  ) ;
dbms_output.put_line( to_char ( (sysdate)    , 'yyyy-mm-dd hh24:mi:ss'  ) ) ;

dbms_output.put_line( '当前时间  + 1  s  '    ) ;
dbms_output.put_line( to_char ( (sysdate)+ (((1/24)/60)/60   )   , 'yyyy-mm-dd hh24:mi:ss'  ) ) ;

dbms_output.put_line( '当前时间  + 1  s  '    ) ;
dbms_output.put_line( to_char ( (sysdate)+ (((5/24)/60)/60   )   , 'yyyy-mm-dd hh24:mi:ss'  ) ) ;

dbms_output.put_line( '当前时间  + 10s  '   ) ;
dbms_output.put_line( to_char (  ((sysdate)+  ( 10 / ( 24*60*60 ))    )  , 'yyyy-mm-dd hh24:mi:ss'  ) ) ;

dbms_output.put_line( '当前 日   '   ) ;
dbms_output.put_line( to_char (  trunc((sysdate))  , 'yyyy-mm-dd hh24:mi:ss'  ) ) ;


dbms_output.put_line( '当前  第2天 1点  '   ) ;
dbms_output.put_line( to_char (  trunc(sysdate)+(  1 +  1/24   ) , 'yyyy-mm-dd hh24:mi:ss'  ) ) ;


dbms_output.put_line( '当前  第2天 9点  '   ) ;
dbms_output.put_line( to_char (  trunc(sysdate)+(  1 +  9/24   ) , 'yyyy-mm-dd hh24:mi:ss'  ) ) ;

 


end ; 
/

<think>我们被要求回答关于Oracle TRUNC函数的使用方法和示例。根据提供的引用内容,TRUNC函数主要用于日期和数字的截断处理。 引用[1]提到:TRUNC函数用于对数字或日期值进行截断处理,分为TRUNC(NUMBER)TRUNC(DATE)两种。 引用[2]和[3]详细说明了两种用法的语法和示例。 引用[4]给出了一个截取日期到日的示例。 因此,我们可以将回答分为两个部分:日期截断和数字截断。 1. 日期截断(TRUNC for dates): 语法:TRUNC(date [, fmt]) 作用:将日期按指定的格式截断,未指定fmt时,默认截断到最近的天(即去掉时间部分)。 示例: - TRUNC(sysdate) -> 返回当前日期,时间部分为00:00:00(即当天的开始) - TRUNC(sysdate, 'YYYY') 或 'YY' -> 返回当年的第一天 - TRUNC(sysdate, 'MM') -> 返回当月的第一天 - TRUNC(sysdate, 'DD') -> 返回当天(去掉时间部分) - TRUNC(sysdate, 'HH24') -> 返回当前小时开始的时间 - TRUNC(sysdate, 'MI') -> 返回当前分钟开始的时间(注意:秒被置为0) - TRUNC(sysdate, 'IW') -> 返回本周第一天(根据NLS_TERRITORY设置,可能是周日或周一) 2. 数字截断(TRUNC for numbers): 语法:TRUNC(number [, decimals]) 作用:将数字的小数部分按指定的小数位数截断,不进行四舍五入。decimals为正数表示保留小数点后几位,负数表示将小数点左边指定位数后的数字置0。 示例: - TRUNC(123.456) -> 123(默认去掉所有小数) - TRUNC(123.456, 2) -> 123.45(保留两位小数,后面的截断) - TRUNC(123.456, -1) -> 120(将小数点左边第一位(个位数)后面的数字置0,即十位以下都置0) - TRUNC(123.456, -2) -> 100(将小数点左边第二位(十位数)后面的数字置0) 注意事项: - 对于日期截断,返回的日期类型仍然是日期类型,时间部分被置为0(即当天的00:00:00)。 - 对于数字截断,不会进行四舍五入,直接截断。 下面我们按照要求,使用中文回答,并生成相关问题。</think>### Oracle TRUNC 函数详解 #### 一、函数概述 TRUNCOracle 的核心函数,用于对**日期**或**数字**进行截断处理,不执行四舍五入。主要分为两种形式: 1. `TRUNC(date [, fmt])`:日期截断 2. `TRUNC(number [, decimals])`:数字截断 #### 二、日期截断(TRUNC for dates) **语法**:`TRUNC(date [, format])` **作用**:将日期截断到指定精度(年/月/日/小时等),时间部分归零[^2][^3]。 | 格式参数 | 说明 | 示例(假设当前时间:2023-10-15 14:30:45) | |----------|----------------------|-------------------------------------------| | `'YYYY'` | 截取到当年第一天 | `TRUNC(sysdate, 'YYYY')` → 2023-01-01 00:00:00 | | `'MM'` | 截取到当月第一天 | `TRUNC(sysdate, 'MM')` → 2023-10-01 00:00:00 | | `'DD'` | 截取到当天零点 | `TRUNC(sysdate)` → 2023-10-15 00:00:00 | | `'HH24'` | 截取到当前小时起点 | `TRUNC(sysdate, 'HH24')` → 2023-10-15 14:00:00 | | `'IW'` | 截取到本周第一天 | `TRUNC(sysdate, 'IW')` → 2023-10-15所在周的第一天(周日或周一)[^3] | #### 三、数字截断(TRUNC for numbers) **语法**:`TRUNC(number [, decimals])` **作用**:按指定小数位数截断数字,不四舍五入[^2][^3]。 | 示例 | 结果 | 说明 | |---------------------------|--------|-------------------------------| | `TRUNC(123.4567)` | 123 | 默认去除所有小数部分 | | `TRUNC(123.4567, 2)` | 123.45 | 保留2位小数(直接截断) | | `TRUNC(123.4567, -1)` | 120 | 小数点左移1位(十位归零) | | `TRUNC(1234.56, -2)` | 1200 | 小数点左移2位(百位以下归零) | #### 四、关键特性 1. **日期截断后类型不变**:结果仍是`DATE`类型,时间部分置为`00:00:00`[^3]。 2. **数字截断不四舍五入**:与`ROUND()`函数本质区别[^2]。 3. **负参数处理**:`decimals`为负数时,小数点左侧指定位数归零[^3]。 #### 五、典型应用场景 1. 生成月报表:`TRUNC(order_date, 'MM')` 按月份聚合数据 2. 计算年龄:`TRUNC(MONTHS_BETWEEN(sysdate, birth_date)/12)` 3. 财务精度控制:`TRUNC(invoice_amount, 2)` 保留两位小数不进位 ```sql -- 综合示例:获取本月销售额 SELECT SUM(amount) FROM sales WHERE TRUNC(sale_date, 'MM') = TRUNC(SYSDATE, 'MM'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值