Oracle TRUNC(date) & TRUNC(number)

本文深入解析 SQL TRUNC 函数的用法,包括如何截取数值和日期,提供具体示例帮助理解。

TRUNC(number[,decimals])

number 待做截取处理的数值
decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分(默认为0)

select TRUNC(5.75) from dual;
--Output:5

select TRUNC(-5.75) from dual;
--Output:-5

SELECT TRUNC(109.29, 1) truncated  FROM dual;
--Output:109.2

SELECT TRUNC(109.29, -1) truncated  FROM dual;
--Output:100

SELECT TRUNC(1234.5678, -3) FROM DUAL;
--Output:1000

TRUNC(date[,fmt])

date 一个日期值

fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去

SELECT SYSDATE FROM dual;
--Output:04.06.2012 22:37:03

SELECT trunc(sysdate,'yyyy') FROM dual;
--Output:01.01.2012 00:00:00,返回当年第一天.

SELECT trunc(sysdate,'mm') FROM dual;
--Output:01.06.2012 00:00:00 返回当月第一天.

SELECT trunc(sysdate,'d') FROM dual;
--Output:03.06.2012 00:00:00 返回当前星期的第一天.

SELECT trunc(sysdate,'dd') FROM dual;
--Output:04.06.2012 00:00:00 返回当前年月日

select trunc(sysdate) FROM dual;
--Output:04.06.2012 00:00:00

select * from MTL_MATERIAL_TRANSACTIONS 
where trunc(creation_date) = To_Date('04-06-2012','dd-mm-yyyy');

转载请注明出处: http://blog.youkuaiyun.com/pan_tian/article/details/7634095

<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、付费专栏及课程。

余额充值