oracle的trunc与round区别及处理日期和数值的区别

小编 2026-06-29 阅读:1937 评论:0
Oracle中round()函数与trunc()函数的区别? round(x[,y])  【功能】返回四舍五入后的值  【参数】x,y,数字型表达式,如果y不为整数则截取y整数部分,如果y>0则...

Oracle中round()函数与trunc()函数的区别?

round(x[,y]) 

【功能】返回四舍五入后的值 

【参数】x,y,数字型表达式,如果y不为整数则截取y整数部分,如果y>0则四舍五入为y位小数,如果y小于0则四舍五入到小数点向左第y位。 

【返回】数字 

【示例】

select round(5555.6666,2.1),round(5555.6666,-2.6),round(5555.6666) from dual; 

返回: 5555.67 , 5600 , 5556 

【相近】trunc(x[,y]) 返回截取后的值,用法同round(x[,y]),只是不四舍五入

 

 

trunc(x[,y]) 

【功能】返回x按精度y截取后的值 

【参数】x,y,数字型表达式,如果y不为整数则截取y整数部分,如果y>0则截取到y位小数,如果y小于0则截取到小数点向左第y位,小数前其它数据用0表示。 

【返回】数字 

【示例】 select trunc(5555.66666,2.1),trunc(5555.66666,-2.6),trunc(5555.033333) from dual; 

返回:5555.66 5500 5555 

【相近】round(x[,y]) 返回截取后的值,用法同trunc(x[,y]),只是要做四舍五入

 

Round 函数 

 语法为ROUND(number,num_digits)

其中Number是需要进行四舍五入的数字;Num_digits为指定的位数,按此位数进行四舍五入,如果 num_digits 大于 0,则四舍五入到指定的小数位,如果 num_digits 等于 0,则四舍五入到最接近的整数,如果 num_digits 小于 0,则在小数点左侧进行四舍五入。

例如:

ROUND(2.149, 0) 将 2.149 四舍五入到一个整数结果为2。

ROUND(2.15, 1) 将 2.15 四舍五入到一个小数位,结果为2.2。

ROUND(2.149, 1) 将 2.149 四舍五入到一个小数位结果为2.1。

ROUND(-1.475, 2) 将 -1.475 四舍五入到两小数位结果为-1.48)。

ROUND(21.5, -1) 将 21.5 四舍五入到小数点左侧一位结果为20。

select round(23.4) from dual;

oracle的trunc与round处理日期和数值的区别

oracle的

trunc(date,[fmt])   

  解释:返回截取时间部分后的DATE,如果有fmt部分的设置,则返回与该部分最近的日期。

round(date,[fmt])   

  解释:返回将日期date舍入后的DATE,如果有fmt部分的设置,则按照fmt指定的格式舍入返回DATE。 

在日期中ROUND函数以六月为分割线进行舍和入年份

         以15号作为分割线无关本月天数\"\"

\"\"

 

一、用trunc函数处理日期

--讲解:年份按**1-6月和7-12月**四舍五入到最近的 几几年1月

select round(to_date(\'6-2月-13\'),\'year\') from dual;

select round(to_date(\'6-5月-13\'),\'year\') from dual;

select round(to_date(\'6-7月-13\'),\'year\') from dual;

 

--讲解:月份按**1-15日和16-30日**四舍五入到最近的 几月1日

select round(to_date(\'15-2月-13\'),\'month\') from dual;

select round(to_date(\'16-2月-13\'),\'month\') from dual;

 

--讲解:天数按**周一至周三 和 周四至周日  **四舍五入到最近的 周日

 

 -- 2017年6月21是周三      运行结果是:2017/6/18 上周日

select round(to_date(\'21-6月-2017\'),\'day\') from dual;

 

-- 2017年6月22是周四      运行结果是:2017/6/25  下周日

select round(to_date(\'22-6月-2017\'),\'day\') from dual;

 

 日期用例 \'2008-11-28 12:59:59\'周五  

1.没有fmt部分时

   语句: SELECT   TRUNC(TO_DATE(\'2008-11-28 12:00:01\',\'YYYY-MM-DD hh24:mi:ss\')) FROM   DUAL;

          结果: 2008-11-28  

        

2.得到最当前日期之前的最近的一个周日的日期

   语句: SELECT   TRUNC(TO_DATE(\'2008-11-28 12:59:59\',\'YYYY-MM-DD hh24:mi:ss\'),\'D\') FROM   DUAL;   

   结果: 2008-11-23 周日

   语句: SELECT   TRUNC(TO_DATE(\'2008-11-28 12:59:59\',\'YYYY-MM-DD hh24:mi:ss\'),\'D\')+1 FROM   DUAL;   

   结果: 2008-11-24 周一

 

3.得到最当前日期的所在月份的第一天

   语句: SELECT   TRUNC(TO_DATE(\'2008-11-28 12:59:59\',\'YYYY-MM-DD hh24:mi:ss\'),\'MM\') FROM   DUAL;   

   结果: 2008-11-1

   语句: SELECT   TRUNC(TO_DATE(\'2008-11-28 12:59:59\',\'YYYY-MM-DD hh24:mi:ss\'),\'MM\')-1 FROM   DUAL; 

   结果: 2008-10-31

 

4.得到最当前日期的所在年份的第一天

   语句: SELECT   TRUNC(TO_DATE(\'2008-11-28 12:59:59\',\'YYYY-MM-DD hh24:mi:ss\'),\'Y\') FROM   DUAL;   

   结果: 2008-1-1

   语句: SELECT   TRUNC(TO_DATE(\'2008-11-28 12:59:59\',\'YYYY-MM-DD hh24:mi:ss\'),\'Y\')-1 FROM   DUAL; 

   结果: 2007-12-31

 

另类用法,有时候我们会遇到这种需求,要求输出当月的所有天数,许多人会烦恼,数据库里又没有这样的表,怎么输出一个月的所有天数呢?用rownum就能解决:

 

 

  SELECT TRUNC (SYSDATE, \'MM\') + ROWNUM - 1

 

 

  FROM DUAL

 

 

  CONNECT BY ROWNUM <= TO_NUMBER (TO_CHAR (LAST_DAY (SYSDATE), \'dd\'))

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表