首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在DB网格中显示MySql TIMEDIFF()

在DB网格中显示MySql TIMEDIFF()
EN

Stack Overflow用户
提问于 2013-03-07 03:03:47
回答 1查看 208关注 0票数 0

当我使用命令行时,这个查询提供了令人满意的结果(它显示了duation,这就是TIMEDIFF的内容):

代码语言:javascript
复制
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中的DB网格中时,TIMEDIFF被格式化为12:00:07 AM,这不是我想要的(看起来是时间,而不是持续时间)。

我使用的是AnyDac,当我在设计时打开查询编辑器并执行它时,结果也是12:00:07 AM,因此AnyDac似乎出于某种原因对它进行格式化。

如何获得像00:00:07这样的输出(持续时间,而不是时间)?

  • 我可以调整AnyDac查询吗?
  • 我可以使用MySql语句显式地格式化输出吗?
  • 这是否是一个OnXXX()函数,我可以对其进行编码以进行修改(以及如何)?

好吧,这段丑陋的代码可以做我想做的事情,但是有没有更优雅的方法呢?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-07 03:11:00

使用DisplayFormat对象的TField属性获取所需的结果,例如:

代码语言:javascript
复制
begin
  MyQuery.Open;
  MyQueryField.DisplayFormat := 'hh:nn:ss';
  //or casting a TField to a descendant, like this:
  (MyQuery.FieldByName('duration') as TDateTimeField).DisplayFormat := 'hh:nn:ss';
end;

编辑

我向TDateTimeField添加了一个强制转换。如果您的实际字段不是TDateTimeField或后代的实例,它将导致EInvalidTypeCast异常,因为您必须将其转换为它所属的正确类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15262319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档