gpt4 book ai didi

sql - 将 SQL 编号转换为时间,以执行日期比较

转载 作者:行者123 更新时间:2023-12-04 22:51:52 25 4
gpt4 key购买 nike

我正在努力对已设置为整数而不是时间戳的两个字段进行 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com