IBM iSeries组合日期和时间小数字段以比较当前时间

我正在IBM iSeries中工作,日期和时间分别存储为小数,分别为8和6个字符('YYYYMMDD')&123456

我已经能够在单独的列中导出当前的日期和时间。 然后两个时间戳的最新日期和时间是可变的,并且第二个日期和时间只有在记录被多次执行时才记录。

我正努力将最新的日期/时间标记与当前时间进行比较,以确定邮票通常在午夜过后的时间量(最好以分钟为单位)。

选择(选择当前日期从sysibm.sysdummy1)“当前日期”,(选择当前时间FROM sysibm.sysdummy1)“当前时间”,

CHAR(日期(
substr(MAX(Date1,Date2),1,4)|| ' - ' || substr(MAX(Date1,Date2),5,2)|| ' - ' || substr(MAX(Date1,Date2),7,2)),USA)“Last View Date”,

MAX(Date1,Date2)= Date2的情况下,则Time2 / 86400 else Time1 / 86400结束“Last Time”

来自.....


您需要将日期和时间数字字段转换为单个时间戳字段。 我们使用的时间戳格式是“YYYY-MM-DD-hh.mm.ss”。

Select timestamp(substr(digits(date1),1,4) ||'-'||
                 substr(digits(date1),5,2) ||'-'||
                 substr(digits(date1),7,2) ||'-'||
                 substr(digits(time1),1,2) ||'.'||
                 substr(digits(time1),3,2) ||'.'||
                 substr(digits(time1),5,2)) as Timestamp1
from ...

注意使用DIGITS而不是CHAR,所以我们得到了前导零。

然后您可以使用TimestampDiff()函数来确定两者之间的分钟数。 TimestampDiff()函数有两个参数。 第一个是一个整数,告诉它你需要哪个时间单位(秒,分钟,小时,天等)。 第二个是将两个日期转换为字符的减法。 我不知道为什么它不能只拿两个时间戳,但这就是IBM给我们的。 这是一个例子。

Select TimestampDiff(4, Char(Current_Timestamp-
                     timestamp(substr(digits(date1),1,4) ||'-'||
                               substr(digits(date1),5,2) ||'-'||
                               substr(digits(date1),7,2) ||'-'||
                               substr(digits(time1),1,2) ||'.'||
                               substr(digits(time1),3,2) ||'.'||
                               substr(digits(time1),5,2)))) as HoursDiff
from ...

当然,这将处理任何过去的午夜日期翻转。 TimestampDiff()中第一个参数的值为:

  1 = Microseconds
  2 = Seconds
  4 = Minutes
  8 = Hours
 16 = Days
 32 = Weeks
 64 = Months
128 = Years
链接地址: http://www.djcxy.com/p/58971.html

上一篇: IBM iSeries Combine Date & Time decimal fields to compare current time

下一篇: Get remaining days, hours and minutes using mySql