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