【问题标题】:Can I add this format in sqlite3我可以在 sqlite3 中添加这种格式吗
【发布时间】:2020-08-24 15:48:16
【问题描述】:

我有一个名为 time_spent 的列,它类似于:hh:mm:ss。例如,00:23:11,这意味着它是 23 分 11 秒。我想知道如何将其中的多个相加。比如说 00:23:11 + 00:10:20 = 00:33:31。我不确定如何在命令中直接执行此操作。我尝试过转换和 CAST,但最终都失败了。任何帮助,将不胜感激。

【问题讨论】:

    标签: sql sqlite datetime time sum


    【解决方案1】:

    你可以用函数time()

    select time('00:23:11', '+00:10:20')
    

    或者只是:

    select time('00:23:11', '00:10:20')
    

    结果:

    00:33:31
    

    如果总和可能超过 24 小时,例如当您想将 '23:59:59' 添加到 '00:23:11' 时,请使用以下语句:

    select 
      case 
        when strftime('%d', datetime('00:23:11', '23:59:59')) = '01' then time('00:23:11', '23:59:59')
        else (24 + time('00:23:11', '23:59:59')) || strftime(':%M:%S', time('00:23:11', '23:59:59')) 
      end
    

    或者:

    select 
     (24 * (strftime('%d', datetime('00:23:11', '23:59:59')) - 1) + time('00:23:11', '23:59:59')) || 
     strftime(':%M:%S', time('00:23:11', '23:59:59'))
    

    结果:

    24:23:10
    

    【讨论】:

      【解决方案2】:

      一旦您以DATETIMEDATETIME 格式存储日期,您就可以使用大量可用的date and time functions

      【讨论】:

        【解决方案3】:

        您可以使用time_to_sec() 将您的时间转换为秒,然后将它们相加,然后使用sec_to_time() 将结果转换为时间。

        例如,以下查询将计算整个表的总 time_spent

        select sec_to_time(sum(time_to_sec(time_spent))) total_time_spent
        from mytable
        

        即使您的时间存储为字符串,这也可以工作,因为它们的格式符合time 数据类型的 MySQL 格式。

        注意 MySQL time 数据类型只能处理 '-838:59:59' 到 '838:59:59' 之间的值。如果您的总时间大于此值,那么您将无法将其转换回 time

        【讨论】:

        • 标签在添加答案后发生了变化。希望已经吸取了在开始时放置正确标签的经验。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-18
        • 2022-11-18
        • 2012-12-30
        • 2020-06-24
        • 1970-01-01
        • 2011-02-24
        相关资源
        最近更新 更多