oracle函数trunc的使用 .

本文深入探讨了SQL中日期和时间的操作方法,包括如何使用TRUNC和ROUND函数进行日期时间的精确调整和四舍五入,以及如何根据不同时间段获取特定日期。通过实例解析,帮助读者掌握SQL日期时间处理技巧。

1、日期比较时精确到日,可以使用 TRUNC(sysdate,'dd')函数。
函数支持格式有:yyyy MM  dd  hh Mi

2、trunc(d1[,c1])  返回日期d1所在期间(参数c1)的第一天日期

d1日期型,c1为字符型(参数),c1默认为j(即当前日期)

c1对应的参数表:

本周星期日:day或dy或d (每周顺序:日,一,二,三,四,五,六)

本月初日期:month或mon或mm或rm

本季日期:q

本年初日期:syear或year或yyyy或yyy或yy或y(多个y表示精度) 

本世纪初日期:cc或scc

【返回】:日期
select sysdate from dual --当时日期

select trunc(sysdate) from dual

select trunc(sysdate ,'DD') from dual --今天日期

select trunc(sysdate,'d')+7 from dual --本周星期日

select trunc(sysdate,'dy')+7 from dual  --本周星期日

select trunc(sysdate,'day')+7 from dual --本周星期日

select trunc(sysdate,'q') from dual--本季开始日期

select trunc(sysdate,'month') from dual --本月开始日期

select trunc(sysdate ,'mm') from dual --本月开始日期

select trunc(sysdate,'year') from dual  --本年开始日期

select trunc(sysdate ,'yyyy') from dual --本年开始日期

select trunc(sysdate ,'HH24') from dual --本小时开始时间

select trunc(sysdate ,'MI') from dual --本分钟开始时间

select trunc(sysdate ,'CC') from dual --本世纪开始时间

select trunc(LAST_DAY(sysdate),'dd') from dual --本月最后一天

 

3、round(10.2356,2)函数可以对数字按指定保留小数位数四舍五入,这个函数还可以对日期四舍五入
select round(sysdate,'yyyy') from dual 四舍五入到年

select round(sysdate,'mm') from dual 四舍五入到月

select round(sysdate,'dd') from dual 四舍五入到日

select round(sysdate,'hh') from dual 四舍五入到小时

select round(sysdate,'mi') from dual 四舍五入到分钟

 

4、TRUNC还可以对number类型使用,
TRUNC(89.985,2)=89.98
TRUNC(89.985)=89
TRUNC(89.985,-1)=80

<think> 我们正在讨论OracleTRUNC函数,用户要求提供使用示例。之前已经解释了TRUNC函数的基本用法,现在需要更详细的使用示例。 根据之前的回答,TRUNC函数用于截断数字或日期,可以指定精度。我们将重点放在数字截断和日期截断上。 注意:用户特别要求TRUNC函数使用示例,因此我们将提供多个场景的示例。 步骤: 1. 数字截断:展示不同精度的数字截断。 2. 日期截断:展示按年、月、日等截断日期。 同时,我们将按照要求使用LaTeX格式表示数学表达式(虽然TRUNC函数本身不涉及复杂数学,但数字部分会使用$...$格式)。 此外,生成相关问题。 注意:在Oracle中,TRUNC函数有两个主要用途:截断数字和截断日期。我们将分别举例。 </think> ### Oracle TRUNC 函数使用示例详解 TRUNC 函数主要用于**直接截断数字或日期**(不进行四舍五入)。以下是分类示例: --- #### 一、数字截断(数值精度处理) 语法: ```sql TRUNC(n [, precision]) ``` | 场景 | 示例代码 | 结果 | 说明 | |----------------------|-------------------------------------------|-------------|-----------------------------| | **截断小数位** | `SELECT TRUNC(15.789, 2) FROM dual;` | $15.78$ | 保留2位小数,直接丢弃第3位 | | **截断整数位** | `SELECT TRUNC(1523, -2) FROM dual;` | $1500$ | 截断十位/个位(补零填充) | | **负数截断** | `SELECT TRUNC(-15.789, 1) FROM dual;` | $-15.7$ | 负方向截断(更接近零)[^1] | | **默认截断(取整)** | `SELECT TRUNC(15.789) FROM dual;` | $15$ | 省略精度时默认取整数部分 | --- #### 二、日期截断(时间精度处理) 语法: ```sql TRUNC(date [, format]) ``` | 场景 | 示例代码 | 结果 | 说明 | |----------------------|----------------------------------------------|---------------------|-----------------------------| | **截断到日** | `SELECT TRUNC(SYSDATE) FROM dual;` | `2023-08-15 00:00:00` | 保留日期,时间归零 | | **截断到月** | `SELECT TRUNC(SYSDATE, 'MM') FROM dual;` | `2023-08-01 00:00:00` | 保留年月,日重置为1号 | | **截断到年** | `SELECT TRUNC(SYSDATE, 'YYYY') FROM dual;` | `2023-01-01 00:00:00` | 保留年份,月/日重置为1月1日 | | **截断到季度** | `SELECT TRUNC(SYSDATE, 'Q') FROM dual;` | `2023-07-01 00:00:00` | 返回季度首日(8月→Q3的7月1日) | --- #### 三、综合应用场景 1. **财务数据清洗** ```sql -- 保留2位小数(不四舍五入) SELECT TRUNC(sales_amount, 2) AS cleaned_amount FROM financial_data; ``` 2. **按月聚合统计** ```sql -- 按月份分组统计销售额 SELECT TRUNC(order_date, 'MM') AS month, SUM(amount) FROM orders GROUP BY TRUNC(order_date, 'MM'); ``` 3. **年龄计算截断** ```sql -- 精确到年的年龄计算(忽略月/日) SELECT TRUNC(MONTHS_BETWEEN(SYSDATE, birth_date)/12) AS age FROM employees; ``` --- ### TRUNC vs ROUND 核心差异 | 函数 | 输入 | 输出 | 原理 | |---------|----------|----------|----------------------| | `TRUNC` | $15.789$ | $15.78$ | **直接丢弃**多余位数 | | `ROUND` | $15.789$ | $15.79$ | **四舍五入**进位处理 | > ⚠️ 边界值注意: > ```sql > SELECT TRUNC(0.999, 0) FROM dual; -- 返回 0 (非1!) > ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值