IBM iSeries 结合日期和时间十进制字段来比较当前时间

Posted

技术标签:

【中文标题】IBM iSeries 结合日期和时间十进制字段来比较当前时间【英文标题】:IBM iSeries Combine Date & Time decimal fields to compare current time 【发布时间】:2015-12-03 16:26:35 【问题描述】:

我在 IBM iSeries 中工作,其中日期和时间分别存储为十进制、8 和 6 个字符、('YYYYMMDD') 和 123456

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

我正在努力将组合的最新日期/时间戳与当前时间进行比较,以确定经过的时间量(最好以分钟为单位),而时间戳通常会超过午夜。

选择 (SELECT current date FROM sysibm.sysdummy1) "Current Date", (SELECT current time FROM sysibm.sysdummy1) "Current Time",

字符(日期( substr(MAX(Date1,Date2),1,4) || '-'|| substr(MAX(Date1,Date2),5,2) || '-'|| substr(MAX(Date1,Date2),7,2)), USA) "最后查看日期",

如果 MAX(Date1,Date2)=Date2 then Time2/86400 else Time1/86400 end "Last Time"

来自.....

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于IBM iSeries 结合日期和时间十进制字段来比较当前时间的主要内容,如果未能解决你的问题,请参考以下文章

通过 Data Studio 为 DB2 for IBM i (iSeries) 构建存储过程失败

Ms Access 链接表到 IBM iSeries 缺少列

IBM iSeries / AS 400中的DB2连接字符串

C# - 无法将类型“IBM.Data.DB2.iSeries.iDB2DataReader”隐式转换为“System.Data.SqlClient.SqlDataReader”

将 iSeries 日期设置为下个月 1 日后将其转换为字符串

十进制字段在 IBM AS400 的窗口上显示为负数