我正在努力对已设置为整数而不是时间戳的两个字段进行 SQL 时间比较。
我在开发人员最初设置为 int(8) 的数据库中有一些性能指标。数据库包含事务的开始和结束时间。例如
一些样本数据可能是
id | start_time | end_time
---------------------------
1 | 85958 | 90001
如果我只是将这两个值相减,我会得到 4043 秒,而交易时间只有 3 秒。但是我正在努力将这些值转换为允许我执行日期比较的时间格式。
我无法在应用程序中进行此计算,因为每天数据库中有 100 行,我正在尝试计算事务的平均和最大时间。
编辑:
澄清
时间以秒为单位
85958 代表 8:59:58 90001 代表 9:00:01
更糟糕的是,午夜 0:01:00 后 1 分钟将被表示为 100。
最佳答案
我在 MySQL 中对此进行了测试,但我确信该技术可以适用于 DB2:
SELECT
(end_time DIV 10000) * 3600 +
((end_time DIV 100) % 100) * 60 +
end_time % 100 -
(start_time DIV 10000) * 3600 -
((start_time DIV 100) % 100) * 60 -
start_time % 100
FROM table1
结果:
3
它的工作方式是使用整数除法和模运算来提取每个时间戳的 HH MM 和 SS 部分,并将每个部分转换为秒。然后将秒数加在一起形成每个时间戳从午夜开始的总秒数。这两者之间的差异给出了交易时间。
请注意,如果事务在午夜之前开始并在午夜之后完成,这将不起作用。您可能需要考虑当天是否已更改并对此进行更正。如果您的数据库中没有存储这一天,那么您可以查找负交易时间并添加 24 小时使它们成为正数,这应该会给出正确的结果(只要交易的长度不超过一天,但是我想这在实践中不太可能)。
我尝试为 DB2 编写此代码(未测试):
SELECT
(end_time / 10000) * 3600 +
MOD(end_time / 100, 100) * 60 +
MOD(end_time, 100) -
(start_time / 10000) * 3600 -
MOD(start_time / 100, 100) * 60 -
MOD(start_time, 100)
FROM table1
关于sql - 将 SQL 编号转换为时间,以执行日期比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3729630/