CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  开发

trunc的问题

楼主pdv()2003-06-02 12:53:26 在 Oracle / 开发 提问

遇到一个很奇怪的问题  
  select   trunc(   (to_date('2003-06-02   00:05:00',   'yyyy-mm-dd   hh24:mi:ss')-  
    trunc(sysdate,   'dd'))*288   )  
  from   dual  
  /  
  返回0  
  但是  
  select   (to_date('2003-06-02   00:05:00',   'yyyy-mm-dd   hh24:mi:ss')-  
    trunc(sysdate,   'dd'))*288  
  from   dual  
  /  
  返回1  
   
  什么道理  
  谢谢大家  
   
  问题点数:0、回复次数:9Top

1 楼Lastdrop(空杯)回复于 2003-06-02 12:59:15 得分 0

是因为  
  SQL>   select   (to_date('2003-06-02   00:05:00',   'yyyy-mm-dd   hh24:mi:ss')   -   trunc(sysdate,   'dd'))  
      2     from   dual  
      3     /  
   
  (TO_DATE('2003-06-0200:05:00'  
  -----------------------------  
                                        .003472222  
   
   
  (to_date('2003-06-02   00:05:00',   'yyyy-mm-dd   hh24:mi:ss')   -   trunc(sysdate,   'dd'))   的值是0.003472222,trunc后等于0,0*288=0。Top

2 楼Lastdrop(空杯)回复于 2003-06-02 13:01:45 得分 0

Sorry,是因为  
  SQL>   select   .003472222*288   from   dual;  
   
  .003472222*288  
  --------------  
          .999999936  
   
  trunc函数的意思是取整数部分,而不会四舍五入,所以  
  SQL>   select   trunc(.003472222*288)   from   dual;  
   
  TRUNC(.003472222*288)  
  ---------------------  
                                          0Top

3 楼pdv()回复于 2003-06-02 13:13:49 得分 0

我的情况是这样的:  
  我有一张表,有一个fdt的字段  
  我要统计每5分钟的情况:[00:00:00,00:00:05)为第一个间隔,[5,10)为第二个间隔  
  表有好几十万条记录,但是又不能建索引  
  我想用一个select语句搞定,  
  所以只能出次下策  
  group   by   trunc((fdt-:day)*1440/5)+1  
  :day为某天的开始时间  
   
  但是存在上诉问题,不知道有没有别的高招Top

4 楼BlueskyWide(谈趣者)回复于 2003-06-02 13:27:55 得分 0

请参考:  
  SQL>   select   trunc(0.99)   from   dual;  
   
  TRUNC(0.99)  
  -----------  
                      0  
   
  SQL>   select   0.99   from   dual;  
   
              0.99  
  ----------  
                .99  
  Top

5 楼BlueskyWide(谈趣者)回复于 2003-06-02 13:31:24 得分 0

参考相关函数:  
  round(value,[scale])  
  floor(value)  
  cell(value)  
  Top

6 楼Lastdrop(空杯)回复于 2003-06-02 13:31:45 得分 0

group   by   trunc((fdt-:day)*1440/5)+1  
  不知道你是不是想四舍五入,也就是你希望trunc(...)之后的结果为1,而不是零是吗?  
  可以  
  group   by   trunc((fdt-:day)*1440/5   +   0.5)+1  
  或者  
  group   by   ceil((fdt-:day)*1440/5)+1  
   
   
   
  Top

7 楼BlueskyWide(谈趣者)回复于 2003-06-02 13:45:22 得分 0

写一个计算5*60的秒级时间函数,用于计算两日期的时间差。  
  Top

8 楼beckhambobo(beckham)回复于 2003-06-02 13:46:48 得分 0

http://download-west.oracle.com/docs/cd/A87860_01/doc/server.817/a85397/function.htm#80101  
   
  有详细说明两面个函数区别Top

9 楼BlueskyWide(谈趣者)回复于 2003-06-02 13:58:47 得分 0

to   beckhambobo:  
  记得斑竹以前贴用过,该网站现打不开,再贴一次吧。  
  Top

相关问题

  • 请问trunc()是什么函数?
  • trunc(snake)进来领分!(白开心)
  • 请教trunc()与Round()的区别!
  • 請問TRUNC和ROUND的區別
  • ios::ate和ios::trunc是什么意思?
  • TRUNC()函数的确切含义?最好用例子说明!
  • 寻找可以代替trunc的c函数
  • 寻找替代trunc函数的c函数
  • 关于TRUNC还有floor的问题,在线等待~~!
  • SQL SERVER有类似ORACLE里的TRUNC()函数的吗?

关键词

  • 函数
  • date
  • sql
  • trunc
  • fdt
  • dd
  • hh24
  • sysdate
  • yyyy
  • ss

得分解答快速导航

  • 帖主:pdv

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo