【转】oracle内置函数 trunc 使用

原文链接 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里面永远只有一条记录。

[

时间: 2024-10-18 14:59:12

【转】oracle内置函数 trunc 使用的相关文章

oracle 内置函数(一)数值函数

oracle内置函数主要分为四类: 数值函数 字符函数 日期函数 转换函数 本分析数值函数: 一.四舍五入round round(double,m) double:我们要处理的小数. m: default:在不填写的情况下默认为0,也就是取整: m>0:四舍五入小数点后m位: m<0:四舍五入小数点前m位. example: 二.取整 ceil:向上取整 floor:向下取整 三.常用计算 1.abs:取绝对值  2.mod:取余(除取模)任意参数为null返回null 3.power:幂函数

ORACLE 内置函数之GREATEST和LEAST

Oracle比较一列的最大值或者最小值,我们会不假思索地用MAX和MIN函数,但是对于比较一行的最大值或最小值呢?是不是日常用的少,很多人都不知道有ORACLE也有内置函数实现这个功能:COALESCE / GREATEST / LEAST. 1. COALESCE 返回该表达式列表的第一个非空value. 格式: COALESCE(value1, value2, value3, -) 含义: 返回value列表第一个非空的值. value列表必须是相同类型,也可以是一个表的同一行.不同列的值进

Oracle内置函数大全(转)

SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数;SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual; A         A      ZERO     SPACE--------- --------- --------- ---------65        97        48        32 2.CHR 给出整数,返回对应的字符;SQL> selec

Oracle 内置函数

SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数;SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual; A         A      ZERO     SPACE--------- --------- --------- ---------65        97        48        32 2.CHR 给出整数,返回对应的字符;SQL> selec

Oracle内置函数内容整理

--绝对值select abs(-100) from dual; --取余select mod(8,3) from dual; --取整,大于该数的最小整数(上限值)select ceil(12.0) from dual;select ceil(12.5) from dual; --取整,小于该数的最大整数(下限值)select floor(12.5) from dual; --四舍五入,选择需要保留的小数位select round(12.456,0) from dual; --截取小数,输入需

Oracle内置函数

--数字型函数select abs (-100) from dual;--绝对值 select mod (10,3) from dual;--求模 select ceil (12.5) from dual;--取上限整数 select floor (12.5) from dual;--取下限整数 select round (12.46327,3) from dual;--四舍五入,逗号后数字表示精度 select trunc (12.455,1) from dual;--截取,逗号后数字表示精度

Oracle内置函数SQLCODE和SQLERRM的使用

在我们写proc程序中经常要有错误处理,在错误处理中我们经常要输出错误信息来给帮助我们分析和解决错误原因,从而更正数据.这时候就会用到SQLCODE和SQLERRM. SQLCode:数据库操作的返回码,其中0表示成功:-1表示失败:100表示没有检索到数据:+1表示用户自定义异常. sqlerrm函数 sqlerrm函数返回指定错误代码的错误信息. 一个Oracle的错误消息最多只能包含512个字节的错误代码.如果没有异常被触发,则SQLCODE返回0,SQLERRM返回"ORA-0000:n

oracle 内置函数(二)字符函数

主要函数: 大小写转换函数 获取子字符串函数(字符串截取) 获取字符串长度函数 字符串连接函数 去除子字符串函数 字符替换函数 一.大小写转换 1.upper:转大写 2.lower:转小写  3.initcap:首字母大写 二.获取子字符串函数(字符串截取) substr(str,beginIndex,endIndex) str:需要处理的字符串 beginIndex:开始截取下标位置,>0时从头部开始数下标,<0时从尾部数下标. endIndex:结束下标. 三.获取字符串的长度 leng

oracle 内置函数(三)日期函数

日期函数概要: 系统时间 日期操作 一.系统时间 sysdate:还是西方的格式,我们一般需要to_char(date,'yyyy-mm-dd hh24:mi:ss') next_day:当前日期的下一个礼拜几的日期 example:求当前时间的下一个礼拜一的日期: last_day(date):取当前时间的月的最后一天:用于判断当前月28.29.30.31天 months_between:求两个时间的月份差 extract:分别获取当前时间的年.月.日