当我使用命令行时,这个查询给了我令人满意的结果(它显示了持续时间,这就是 TIMEDIFF 的含义):
mysql> select timediff(end_time_stamp,start_time_stamp) from test_runs;
+-------------------------------------------+
| timediff(end_time_stamp,start_time_stamp) |
+-------------------------------------------+
| 00:00:07 |
| 00:00:11 |
| 00:01:23 |
+-------------------------------------------+
3 rows in set (0.00 sec)
当我将它放在 Delphi 的数据库网格中时,TIMEDIFF 的格式为12:00:07 AM
,这不是我想要的(看起来像时间,而不是持续时间)。
我正在使用 AnyDac,当我在设计时打开查询编辑器并执行它时,结果也是12:00:07 AM
,所以似乎 AnyDac 出于某种原因正在格式化它。
如何获得 00:00:07 之类的输出(持续时间,而不是时间)?
- 我可以调整 AnyDac 查询吗?
- 我可以使用 MySql 语句显式格式化输出吗?
- 是否有一个 OnXXX() 函数,我可以对其进行编码以重新格式化(以及如何)?
[更新] 好吧,这段丑陋的代码做了我想要的,但是有没有更优雅的方式呢?
SELECT run_id,
start_time_stamp,
end_time_stamp,
CONCAT(CONCAT(CONCAT(CONCAT(LPAD(EXTRACT(HOUR FROM timediff(end_time_stamp,start_time_stamp)), 2, '0'), ":"),LPAD(EXTRACT(MINUTE FROM timediff(end_time_stamp,start_time_stamp)), 2, '0'), ":"), LPAD(EXTRACT(SECOND FROM timediff(end_time_stamp,start_time_stamp)), 2, '0'))) AS duration,
description
FROM test_runs ORDER BY start_time_stamp DESC