【问题标题】:Find the difference between dates in a SQL Server database, in hours and calculate total hours in each day查找 SQL Server 数据库中日期之间的差异(以小时为单位)并计算每天的总小时数
【发布时间】:2015-06-18 12:46:24
【问题描述】:

我正在尝试根据我的项目要求对 SQL Server 数据库数据进行排序。我尝试了许多 SQL 查询来过滤数据,但没有一个能正常工作。请帮我完成工作。

我有一个包含 5 列的数据库表:ProductNameStartDateEndDateUsageQuantityCoststartdateenddate 也是带时间的日期,如果减去它们会产生一小时的差异。

同样,开始日期和结束日期的多个副本可用于满月的数据。我需要的是找出一种特定产品每天的总使用量和成本,并且还想找出该产品使用的小时数。

谁能给我推荐一下sql查询或者sn-p的代码找出结果?

数据库中的日期如下所示

ProductName StartDate            EndDate              UsageQuantity Cost
 xyz        01-04-2015 00:00    01-04-2015 01:00         0.6258       .007
 sf         01-04-2015 00:00    01-04-2015 01:00
 de         01-04-2015 01:00    01-04-2015 02:00
df          01-04-2015 01:00    01-04-2015 02:00
            01-04-2015 02:00    01-04-2015 03:00
            01-04-2015 02:00    01-04-2015 03:00
            01-04-2015 03:00    01-04-2015 04:00
            01-04-2015 03:00    01-04-2015 04:00
            01-04-2015 04:00    01-04-2015 05:00
            01-04-2015 04:00    01-04-2015 05:00
            01-04-2015 05:00    01-04-2015 06:00
            01-04-2015 05:00    01-04-2015 06:00
            01-04-2015 06:00    01-04-2015 07:00
            01-04-2015 06:00    01-04-2015 07:00

帮我把日期和时间分开,并计算每天的小时数。

提前致谢

【问题讨论】:

  • 请展示您的尝试,这有助于使问题更清晰,也可能帮助您从答案中看出您做错了什么。
  • 您的表中的startdateenddate 是什么数据类型

标签: c# asp.net sql-server


【解决方案1】:

以此为出发点

SELECT SUM(TIMESTAMPDIFF(SECOND,StartDate, EndDate)), SUM(UsageQuantity), SUM(Cost)
FROM tablename
GROUP BY ProductName, Date(StartDate);

【讨论】:

  • 假设日期字段是日期,而不是字符串
  • 应该除以 3600 以将秒数更改为小时 - 但我将把它留给你。
  • 嗨,保罗感谢您分享查询。我试过了。但它提供了当月的总和。我想知道每天数据库中有多少小时。
【解决方案2】:
CREATE PROCEDURE GetDaysUsageForProduct
(
    @ProductName varchar(100),
    @DateUsed    datetime
)
AS
BEGIN

    SELECT @DateUsed DateUsed, 
           ProductName, 
           SUM(UsageQuantity) TotalQuantityUsed,
           SUM(DATEDIFF(hh, StartDate, EndDate) HoursUsed
           SUM(Cost) TotalCost
      FROM myTable
     WHERE CONVERT(varchar(10), StartDate, 112) =  CONVERT(varchar(10), @Date, 112)
       AND ProductName = @ProductName
      GROUP BY ProductName

END
GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多