【问题标题】:How to format timestamp from mysql select query to exclude the unnecessary zeros in HH:MM:SS?如何从 mysql 选择查询格式化时间戳以排除 HH:MM:SS 中不必要的零?
【发布时间】:2020-06-27 00:13:36
【问题描述】:

我有一个选择查询:

string checkprogress = "SELECT TIMEDIFF(CURRENT_TIMESTAMP,timestamp) FROM times";

这反过来给了我一个带有不必要前导零的格式...

00:01:39 //(hours:minutes:seconds)

如何更改此查询或更改我的 c# 代码,以便我的字符串排除时间戳中所有不必要的零?

请记住,如果时间超过 24 小时,字符串将变为:

1.00:01:39 //(day.hours:minutes:seconds)

上面的格式完全没问题,因为包含了日期值,所以我正在寻找的格式更改严格适用于 DAY 值无效时(A.K.A 时间低于 23:59:59)。

【问题讨论】:

  • 这些答案之一是否解决了您的问题?如果没有,您能否提供更多信息来帮助回答?

标签: mysql sql formatting timestamp timespan


【解决方案1】:

它不漂亮,但它有效。

SET @endDate = '2020-06-27 10:02:00';
SET @startDate = '2020-06-26 12:59:01';
SELECT 
CONCAT(
  IF(FLOOR(TIMESTAMPDIFF(SECOND, @startDate, @endDate) / 86400) > 0,CONCAT(FLOOR(TIMESTAMPDIFF(SECOND, @startDate, @endDate) / 86400), '.'),''),
  LPAD(FLOOR((TIMESTAMPDIFF(SECOND, @startDate, @endDate) % 86400)/3600),2,'0'), ':',
  LPAD(FLOOR((TIMESTAMPDIFF(SECOND, @startDate, @endDate) % 3600)/60),2,'0'), ':',
  LPAD((TIMESTAMPDIFF(SECOND, @startDate, @endDate) % 60),2,'0')
);

结果21:02:59

SET @endDate = '2020-06-27 10:02:00';
SET @startDate = '2020-06-26 09:59:01';
SELECT 
CONCAT(
  IF(FLOOR(TIMESTAMPDIFF(SECOND, @startDate, @endDate) / 86400) > 0,CONCAT(FLOOR(TIMESTAMPDIFF(SECOND, @startDate, @endDate) / 86400), '.'),''),
  LPAD(FLOOR((TIMESTAMPDIFF(SECOND, @startDate, @endDate) % 86400)/3600),2,'0'), ':',
  LPAD(FLOOR((TIMESTAMPDIFF(SECOND, @startDate, @endDate) % 3600)/60),2,'0'), ':',
  LPAD((TIMESTAMPDIFF(SECOND, @startDate, @endDate) % 60),2,'0')
)

结果1.00:02:59

【讨论】:

    【解决方案2】:

    如果你使用 MySQL 8+,你可以使用REGEXP_REPLACE:

    SELECT REGEXP_REPLACE('00:01:39', '^[0:]+(\\d)', '$1')
    

    对于早期版本,您可以调用两次TRIM,第一次从字符串中修剪前导00:s,然后修剪任何进一步的前导0s:

    SELECT TRIM(LEADING '0' FROM TRIM(LEADING '00:' FROM '00:01:39'))
    

    在这两种情况下,输出都是

    1:39
    

    TRIM 方法有一个警告,如果结果可以是00:00:00,则输出将是一个空字符串。这可以在您的应用程序中处理,或者您可以使用IF 表达式来检查它:

    IF(TIMEDIFF(t1, t2) = '00:00:00', 0, TRIM(LEADING '0' FROM TRIM(LEADING '00:' FROM TIMEDIFF(t1, t2))))
    

    Demo on dbfiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2019-01-18
      • 2011-12-03
      相关资源
      最近更新 更多