【问题标题】:How to Sum Hours/Minutes through SQLite in C#?如何在 C# 中通过 SQLite 求和小时/分钟?
【发布时间】:2020-07-02 11:43:10
【问题描述】:

我有一个名为 WorkDuration 的简单表,其中包含来自 varchar 类型的字段 WorkedHour

例如:

WorkedHour:

04:23   

08:15    

02:00  

现在我想要 WorkDuration 中的 sum(WorkedHour)。

为此,我尝试了以下代码行来获取有效但不正确的总持续时间。

 database.ExecuteScalarAsync<int?>("SELECT SUM(WorkedHour) FROM WorkDuration WHERE WorkedHour > 0");

那么我怎样才能将所有 WorkedHour's 列相加得到总持续时间,如下所示:

WorkedHour:

04:23   

08:15    

02:00  
-----------

Total: 14:38 Hours

如果有人可以帮助我,我会很高兴。

提前致谢。

【问题讨论】:

  • WorkedHour 的数据类型是什么?
  • SQLite 不能很好地完成DateTime。事实上,SQLite 甚至没有DateTime 数据类型。我的建议是返回所有时间值,然后使用 C# 的强大功能并在代码中进行计算。
  • @Jason WorkedHour 字段为 varchar 类型。
  • 那是一个字符串。您不能在字符串上使用 SUM。您可以想象将数据解析出来并将其转换为 SQL,但在您的应用程序代码中执行此操作会容易得多。还可以考虑修改您的数据库以将此数据存储为包含分钟的单个 int 字段。

标签: c# sqlite xamarin.forms


【解决方案1】:

结果格式为 HH:MM:SS

select time(
             sum(strftime('%s', WorkedHour), 
             'unixepoch'
           ) 
from WorkDuration;

或者,如果您只想学习部分单位:

select strftime(
                '%H:%M:%S', 
                ( sum('%s', WorkedHour) ),
                'unixepoch'
               )
from WorkDuration;

在第二个示例中,您可以随意删除 %H 或 %M 或 %S。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    相关资源
    最近更新 更多