【发布时间】:2019-01-10 02:11:02
【问题描述】:
我有一个有效的select 语句MySQL,它从以秒为单位的持续时间返回days、hours、mins、secs -
SELECT Name, Zone, Duration,
FLOOR(Duration/60/60/24) as days,
FLOOR(Duration/60/60)%24 as hours,
FLOOR(Duration/60)%60 as mins,
Duration%60 as secs
from duration
我希望每列有 2 个字符,所以所有数据都是 inline,所以不知何故需要用零填充任何单个字符
(即如果天数为 1,则填充 / 格式,因此天数为 01)
我已经尝试过 pad() -
PAD(FLOOR(Duration/60/60/24),2,0) as days
但这会导致 NULL。
任何想法表示赞赏。
问候 拉尔夫
【问题讨论】:
-
您为什么要尝试在 SQL 查询中完成表示层的工作?别。从数据库中获取持续时间,并在表示层中对其进行格式化。
-
谢谢,虽然我试图避免必须先执行 c:set 然后 fmt: 最后是 c:out,除非有更简单的方法?
-
这并不容易。这是关于正确的。持久层应该返回您可以轻松使用的结构化数据,而不是预先格式化的文本。表示层负责以最佳方式为您的用户显示数据。如果您决定以人类形式显示持续时间(例如“几秒钟”或“3 小时”),该怎么办。显然数据库无法做到这一点。如果您更改格式或 i18n 要求,则不必更改持久层。
-
更不用说,如果您创建一些标签或函数来正确格式化持续时间,您可以在任何地方使用它(数据库、Java 代码等),而您没有更改每个返回持续时间的 SQL 查询。
标签: mysql jsp datetime jdbc time