`
MyDicta
  • 浏览: 19233 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle 时间相减时精度丢失问题

 
阅读更多

Oracle 时间相减时精度丢失问题

首先此问题发生于一个很巧然的需求(后面简单介绍);说巧然是因为发生的概率实在是非常小,但其在11g版本中也依然存在。

 

见下面SQL语句:

select (d1 - d2) * 24 * 60 * 60 as diff1,
       (d2 - d3) * 24 * 60 * 60 as diff2,
       floor(60 / 15) f,
       floor((d1 - d2) * 24 * 60 * 60 / 15) f2,
       floor((d2 - d3) * 24 * 60 * 60 / 15) f3
  from (select to_date('2013-6-22 00:00:00', 'yyyy-mm-dd hh24:mi:ss') as d1,
               to_date('2013-6-21 23:59:00', 'yyyy-mm-dd hh24:mi:ss') as d2,
               to_date('2013-6-21 23:58:00', 'yyyy-mm-dd hh24:mi:ss') as d3
          from dual)

执行结果: 

DIFF1 DIFF2 F F2 F3
 60       60       4  3   4

 

SQL语句目的是对两两时间相减得出的秒数后除15取整。(floor为Oracle里自带的取整函数),从sql里我们很简单的得出 (d1与d2) 和 (d2与d3) 相差秒数都为60,但f2结果却为3,明显不对。f3却又是正确的。

可以猜测的是d1(跨天时间)在与d2相减后转化为秒时发生了精度丢失;因此d1-d2 不对,d2-d3没有问题。

在得知此问题后,解决方法是在取整前先对结果进行四舍五入

即:

 floor(round((d1 - d2) * 24 * 60 * 60) / 15) f2

 

 到此我们知道发生此问题的概率实在是很小吧,首先若只是单纯的针对时间相减并转化为单位秒还不会有问题,但如果需要进一步对值进行运算并取整就要小心了,若减数刚好跨天就可能会存在错误! 在此提出来希望为大家借鉴。

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    oracle日期相减.txt

    oracle 日期相减

    oracle日期相减.pdf

    Oracle 日期相减是指计算两个日期之间的时间差异,包括月份、天数、小时、分钟、秒、毫秒等。下面将详细介绍 Oracle 中日期相减的方法。 一、计算月份差 MONTHS_BETWEEN 函数是 Oracle 中计算两个日期之间的月份...

    西门子博途1200 时间相减

    西门子博途1200 时间相减 西门子博途1200 时间相减是指在 Siemens STEP 7 (TIA Portal) 中,对 CPU 模块的日期和时间变量进行输入、读取和编辑。为了实现这一功能,需要使用特定的数据类型和指令。 在 S7-300/400 ...

    C#中两时间相减(return x天x小时x分x秒)

    在本文中,我们将深入探讨如何在C#中进行时间相减,并返回一个格式化为“x天x小时x分x秒”的结果。 首先,让我们了解C#中的DateTime结构。DateTime是.NET Framework中用于表示日期和时间的类,它提供了多种方法和...

    oracle日期时间判断函数

    在Oracle数据库系统中,日期和时间的处理是数据库操作中的重要组成部分。Oracle提供了丰富的日期时间函数,用于处理和分析日期时间数据。针对标题"oracle日期时间判断函数"和描述中提到的内容,我们可以深入探讨两个...

    android日期相减

    在Android开发中,日期操作是一项常见的任务,尤其是在创建日历应用、广告展示或者用户交互界面时。本主题主要关注如何在Android中进行日期相减,以及相关联的UI组件使用,如数字日历和自定义对话框。我们将探讨以下...

    分钟秒钟的时间相减 时间类CTime,分钟和秒钟

    输入一个起始时间和一个结束时间(起始时间早于结束时间),通过运算符重载-(减号),计算这两个时间相隔多少秒钟。说明:这两个时间在同一小时之内,且采用60分钟60秒钟的计时分式,即从00:00-59:59。

    double类型精度丢失;double转换到64位整数

    然而,由于浮点数的二进制表示方式,当进行某些计算或转换时,可能会出现精度丢失的问题。标题提到的“double类型精度丢失;double转换到64位整数”就涉及到这一关键概念。 精度丢失通常发生在以下几种情况: 1. *...

    C#实现两个时间相减的方法

    在C#编程语言中,处理时间的计算是一项常见的任务,特别是在需要进行时间间隔分析或时间差比较时。本文将详细讲解如何使用C#实现两个时间相减的方法,并提供实例分析来展示具体的操作技巧。 首先,我们需要了解C#中...

    javascript解决小数的加减乘除精度丢失的方案

    4. 除法(accDiv)函数:这个函数处理除法时的小数精度问题,通过调整除数和被除数的小数部分位数,并进行相应的乘除操作,来获得精确的商。 在实际开发过程中,当遇到JavaScript中的小数运算精度问题时,可以通过...

    WinForm中界面日期相减(DateTimePicker控件)

    在Windows Forms(WinForm)开发中,DateTimePicker控件是一个常用元素,用于用户选择日期或时间。本主题将深入探讨如何在WinForm应用中利用DateTimePicker控件进行日期的相减操作,从而实现一些日期计算的功能。 ...

    double 计算过程出现的误差

    本篇文章将深入探讨在C#、SQL Server以及Oracle数据库中使用`double`类型进行计算时可能出现的误差,并通过具体的代码示例来分析这些误差产生的原因及解决方案。 #### 一、`double`类型的基本概念 `double`是一种...

    oracle时间差表达式

    1. **精度问题**:需要注意的是,在计算时间差时可能会出现小数部分,如果需要精确到毫秒,则需要使用更为复杂的方法或数据类型。 2. **时区问题**:在处理涉及不同时区的数据时,需要特别注意时区的转换问题,...

    oracle sql计算一段时间内(除去周六日)的秒数

    利用 oracle sql 实现 计算一段时间内(除去周六日)的秒数

    PCL三维点云相减程序

    本文将深入探讨“PCL三维点云相减程序”,并解释如何通过点云相减技术去除背景,提取目标对象。 点云相减,顾名思义,就是将两个点云数据集进行操作,得到它们之间的差异部分。这一过程通常用于去除静态背景,突出...

    javaScript和java中日期相减得出天数方案

    ### JavaScript和Java中日期相减得出天数方案 #### JavaScript中的日期相减方案 在JavaScript中,计算两个日期之间的天数差是一个常见的需求。这里提供了一种方法来实现这一功能。 1. **基本原理**: - 使用`...

    日期时间相减、累计小时的计算公式

    日期时间相减、累计小时的计算公式

    OpenCV实现两个图像相减

    当用户移动滑块时,会触发`onTrackerSlid`函数,实时更新结果图像并显示在窗口中。 6. **程序清理与退出**: 最后,使用`cvWaitKey`函数等待用户按键,以便程序不会立即结束。然后释放所有图像资源和销毁窗口,...

    C# 日期相减实例

    在C#编程中,日期和时间的处理是常见的任务,特别是在开发各种应用程序时。本教程将专注于一个特定的场景:如何在C#中进行日期相减。`DateTime`类是.NET框架提供的一种强大的工具,用于处理日期和时间操作。在这个...

    labview计算时间输入控件与当前时间的差值,并以HH:MM:SS形式的字符串显示

    3. **计算时间差**:将时间输入控件的值与当前时间相减,就可以得到两者之间的差值。这个差值也是一个浮点数,代表了两时间点之间相隔的秒数。 4. **格式化时间差**:为了以HH:MM:SS的形式显示时间差,我们需要进行...

Global site tag (gtag.js) - Google Analytics