【问题标题】:How do I change the TIMESTAMPDIFF date format in MySQL?如何更改 MySQL 中的 TIMESTAMPDIFF 日期格式?
【发布时间】:2020-11-02 15:37:24
【问题描述】:

我使用一个日期表的值减去另一个日期表来创建一个总时间日期表。 但是,我不喜欢这种格式。

CONCAT(
        TIMESTAMPDIFF(day,TIME_END,TIME_START), 'd',
        MOD(TIMESTAMPDIFF(hour,TIME_END,TIME_START), 24), 'h',
        MOD(TIMESTAMPDIFF(minute,TIME_END,TIME_START), 60), 'm'
      ) AS Total_Times

结果如下所示:

  • 0d0h-48m
  • -2d-1h-7m
  • 0d0h-33m
  • 0d0h0m
  • -1d-21h-47m

似乎如果数字大于零,它会在它旁边添加一个连字符,否则它会将它旁边的任何内容分组而没有空格。如何让它在零和之间创建一个空格并删除连字符以显示如下:

  • 0d 0h 48m
  • 2d 1h 7m
  • 0d 0h 33m
  • 0d 0h 0m
  • 1d 21h 47m

注意,在实际日期列 (TIME_END,TIME_START) 中,它们的值写成 2020-11-02 15:32:28。

【问题讨论】:

  • 负数前有一个减号。这几乎是标准。

标签: mysql concat date-format sql-timestamp timestampdiff


【解决方案1】:

我认为这里真正的问题是,有时您将TIME_STARTTIME_END 置于错误的位置。如果您想区分较早的开始时间和较晚的结束时间,那么前者应该出现在对TIMESTAMPDIFF 的调用中之前后者。使用这个版本:

CONCAT(
    TIMESTAMPDIFF(day, TIME_START, TIME_END), 'd ',
    MOD(TIMESTAMPDIFF(hour, TIME_START, TIME_END), 24), 'h ',
    MOD(TIMESTAMPDIFF(minute, TIME_START, TIME_END), 60), 'm'
) AS Total_Times

进一步评论您当前的输出,例如

-2d-1h-7m

您在此处看到的破折号实际上是 减号 符号,而不是破折号。您应该交换TIME_STARTTIME_END 的顺序以获得正数。

【讨论】:

  • 啊,现在说得通了。非常感谢您花时间为我更改它并解释它为什么会这样显示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多