我想比较SQL Server的日期/时间(类型为datetime-16)和db2 / 400(类型Z)。
通常我想知道在18:44和18:45之间有60秒
每个人的显示特征略有不同。
SQL Server 2016-07-26 18:45:00.000
Db2/400 2016-07-26-18.45.00.000000
如果我在db2数据库上执行此操作:
SELECT
MYDATETIME,
'2016-07-26 18:44:00.000',
MYDATETIME - '2016-07-26 18:44:00.000'
FROM @dates
我明白了
MYDATETIME Constant value Numeric Expression
2016-07-26-18.45.00.000000 2016-07-26 18:44:00.000 100.000000
Db2 SQL似乎非常慷慨接受稍微不同的格式。
但是查询告诉我1分钟差异= 100.看起来我在这里发生了基础10比较。
使用db2时间戳功能,我得到相同的结果
SELECT
MYDATETIME,
'2016-07-26 18:44:00.000',
MYDATETIME - timestamp('2016-07-26-18.44.00.000000')
FROM @dates
如何进行比较,让我在几分钟(或几小时或几天)内有所不同?
答案 0 :(得分:4)
在DB2 for IBM i上减去两个时间戳的结果称为duration
您可能会发现TIMESTAMPDIFF()
有用
select
timestampdiff(2
, char(timestamp('2016-07-27 08:35:00.000000')
- timestamp('2016-07-27 08:34:00.000000')
)
)
from sysibm.sysdummy1
请注意,第一个参数是一个小int,其值为
1 Microseconds
2 Seconds
4 Minutes
8 Hours
16 Days
32 Weeks
64 Months
128 Quarters
256 Years
第二个参数必须是持续时间的字符表示。
编辑正如Clockwork-Muse所指出的,TIMESTAMPDIFF()
最好用于不到一个月的短时间。
如果需要对较长值进行准确计算,请使用以下格式:
(DAYS(t1) - DAYS(t2)) * 86400 +
(MIDNIGHT_SECONDS(t1) - MIDNIGHT_SECONDS(t2))
样品
select
(DAYS(timestamp('2016-07-27 08:35:00.000000'))
- DAYS(timestamp('2015-07-27 08:35:00.000000'))
) * 86400 +
(MIDNIGHT_SECONDS(timestamp('2016-07-27 08:35:00.000000'))
- MIDNIGHT_SECONDS(timestamp('2015-07-27 08:35:00.000000')))
from sysibm.sysdummy1
答案 1 :(得分:0)
我知道这是DB2 / 400,但根据我的经验,运算符的工作时间相同,所以从this article开始:
SELECT
MYDATETIME,
'2016-07-26 18:44:00.000',
MYDATETIME - timestamp('2016-07-26-18.44.00.000000') SECONDS
FROM @dates
由于我没有DB2实例来测试它,接下来我会尝试这样做:
SELECT
MYDATETIME,
'2016-07-26 18:44:00.000',
SECOND(MYDATETIME - timestamp('2016-07-26-18.44.00.000000'))
FROM @dates