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



我在IBM iSeries工作,那里的日期和时间存储为十进制8&6个字符,(YYYYMMDD)&123456

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

我很难将最新的日期/时间戳与当前时间进行比较,以确定经过的时间量(最好以分钟为单位),因为戳通常会移动到午夜之后。

选择(从sysibm.sysdummy1中选择当前日期)"当前日期",(从sysibm.sysdummy1中选择当前时间)"当前时间",

char(日期(
substr(MAX(Date1,Date2),1,4)||'-'||substr(MAX(Date1,Date2),5,2)||'-'||substr(MAX(Date1,Date2),7,2)),美国)"上次查看日期",

当MAX(Date1,Date2)=Date2时的情况,然后Time2/86400其他Time1/86400结束"上次"

来自。。。。。

您需要将日期和时间数字字段转换为单个时间戳字段。我们使用的时间戳格式为"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

相关内容

  • 没有找到相关文章

最新更新