【发布时间】:2014-06-12 23:18:55
【问题描述】:
我在DB2上使用TIMESTAMPDIFF
我的问题分为两部分:
首先,当我尝试在两个时间戳上使用它时,其中一个有一些空值,它给了我以下错误:
“SCE1.TIMESTAMP”在使用它的上下文中无效.. SQLCODE=-206, SQLSTATE=42703, DRIVER=4.16.53"
SCE1.TIMESTAMP 是具有空值的列,有没有一种方法使函数只对时间戳值起作用而忽略该列中的空值?
第二个TIMESTAMPDIFF计算如下:
One year has 365 days
One year has 52 weeks
One year has 12 months
One month has 30 days
One day has 24 hours
One hour has 60 minutes
One minute has 60 seconds
我想知道是否有办法让它更准确,例如,如果两个时间戳都超过从 28 天(“2 月”)到 31 天(“3 月”)的月份,结果将不准确,因为函数知道一个月30天,有办法克服吗?
【问题讨论】:
-
哪个平台/版本的 db2,关键是时区呢?请注意,由于一个主要问题,您不能使用
TIMESTAMPDIFF(...)获得准确的图片 - 函数的 input 是(a 的字符串表示)相对间隔;类似于'00100302140121'('0010'年,'03'月,'02'天,'14'小时,'01'分钟,'21'秒)。除了要知道一年(或一个月)有多长,你还需要知道你从什么开始。TIMESTAMPDIFF(...)从根本上坏了。你想用这些信息做什么,可能有办法绕过它。 -
....您的应用程序层语言可能有更好的工具来执行此数学运算(如果您需要信息)。否则,您将不得不编写(并测试)一个等效函数才能获得准确的结果。
-
没有办法让 TIMESTAMPDIFF() 以不同的方式工作。为了让我们更多地了解您收到错误的原因,我们首先必须查看引发错误的语句以及所涉及列的定义。在我们看到您正在使用的内容之前,我们无法猜测可能出了什么问题。