码迷,mamicode.com
首页 > 数据库 > 详细

【转】oracle内置函数 trunc 使用

时间:2014-12-17 01:35:19      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   color   os   使用   sp   on   

 

原文链接 http://blog.csdn.net/oscar999/article/details/16839417

前言
 trunc  是 truncate 的简写。
中文翻译是 “截断”或 “截短”。
表面看上去,应该是对字串或是数字进行截取。 实际上这个函数有两种用法, 而且这两种用法看上去很不一样。
1. 对 number 类型使用。其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。
2. 对日期类型使用。

对 number 类型使用
语法格式:
TRUNC(number[,decimals])
  --number 待做截取处理的数值
  --decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分。
                      需要特别注意的是, 这个参数可以为负数,表示为小数点左边指定位数后面的部分以 0 替换。比如 TRUNC(123.456789,-1) = 120
使用实例:

1)  decimals 不设置,截去所有小数部分
select TRUNC(123.456789) from dual;  
返回 : 123

2) decimals 设置为正整数
select TRUNC(123.456789,2) from dual;  
返回 123.45
比较使用ROUND的状况:

select ROUND(123.456789,2) from dual;  
返回 123.46  (四舍五入了)

3) decimals 设置为负整数
select TRUNC(123.456789,-1) from dual;  
返回: 120 (最后一位从 3 变成 0 了)

4) decimals 设置为小数
select TRUNC(123.456789,2.8) from dual;  
select TRUNC(123.456789,2.4) from dual;
返回: 123.45

看上去decimals可以设置成小数,只是小数部分完全忽略,设置小数没什么意义。( 但是如果这个参数部分是计算出来的小数,就没有必要做类型转换)



对日期类型使用

语法格式:
TRUNC(date[,fmt]) 
date 一个日期值
fmt 日期格式,该日期将由指定的元素格式所截取。忽略它则由最近的日期截取
这个函数的使用解释应该是:  返回日期date所在期间(参数fmt)的第一天日期
fmt: 对应的参数表:
本周星期日:day或dy或d (每周顺序:日,一,二,三,四,五,六)
本月初日期:month或mon或mm或rm
本季日期:q
本年初日期:syear或year或yyyy或yyy或yy或y(多个y表示精度) 
本世纪初日期:cc或scc
【返回】:日期

使用实例:(以当前日期 sysdate 为例)
1.  取得当前日期
select trunc(sysdate) from dual;  
select trunc(sysdate ,DD) from dual;  
返回:  20-11月-13

2. 返回本周星期日
select trunc(sysdate,d) from dual;  

因为西方国家是从周日为一周的开始, 
对于中国来说, 这个返回的其实是上周的周末。
如果要得到中国习惯的本周末的话, 就要加上 7 天了。
select trunc(sysdate,d)+7 from dual;  

类似的用法还可以用:
select trunc(sysdate,dy)+7 from dual;  
select trunc(sysdate,day)+7 from dual;  

3. 返回本季的开始时间
select trunc(sysdate,q) from dual;  

4. 返回本月开始时间
select trunc(sysdate,month) from dual;  
select trunc(sysdate ,mm) from dual;  

5. 本年开始时间
select trunc(sysdate,year) from dual;  
select trunc(sysdate ,yyyy) from dual;  

6.本小时开始时间
select trunc(sysdate ,HH24) from dual;  
返回当天的日期

7. 本分钟开始时间
select trunc(sysdate ,MI) from dual;  

同样返回当天的日期


其他
1. 注意, 不能对string 类型来使用这个函数:
select TRUNC(abcdef,2) from dual;  

这种用法是错误的。
但是, 一下这样却是可以的:
select TRUNC(123.456789,2) from dual;  

个中差别, 应该不难理解^^
2. 这里频繁使用到dual 这张表:
dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。

[

【转】oracle内置函数 trunc 使用

标签:style   blog   http   ar   color   os   使用   sp   on   

原文地址:http://www.cnblogs.com/ihongyan/p/4168458.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!