【问题标题】:TIMESTAMPDIFF Function on DB2DB2 上的 TIMESTAMPDIFF 函数
【发布时间】: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() 以不同的方式工作。为了让我们更多地了解您收到错误的原因,我们首先必须查看引发错误的语句以及所涉及列的定义。在我们看到您正在使用的内容之前,我们无法猜测可能出了什么问题。

标签: sql db2


【解决方案1】:

1) 仅当两项都不为空时才计算函数。

case when stamp1 is null then null
     when stamp2 is null then null
     else timestampdiff( stamp1, stamp2 )
end

2) 这已经回答过,包括我自己。搜索,您应该会找到。

【讨论】:

  • 感谢您的及时回答先生,我在运行它时遇到以下错误:“没有找到具有兼容参数的类型为“FUNCTION”的名为“TIMESTAMPDIFF”的授权例程.. SQLCODE=-440, SQLSTATE =42884, DRIVER=4.16.53 " 2) 我搜索了你的帖子,但它们太多了,我可以搜索一些词来快速确定帖子。非常感谢!!
  • @Warrant TIMESTAMPDIFF(...) for DB2 不接受两个时间戳作为输入。
猜你喜欢
  • 2011-12-02
  • 2022-01-13
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多