Access计算日期但sql使其为空?

时间:2015-02-02 22:47:28

标签: sql-server-2008 tsql ms-access access-vba

我有一个访问查询,它接受启动和停止,并在几分钟内返回运行时间,然后根据运行时间在几分钟内计算运行时间:

用于检索以下结果的访问查询部分是:

 [Net Weight Tracking].[Start Time], [Net Weight Tracking].[Stop Time], 
    Hour([start time]) AS HrStart, Hour([stop time]) AS HrStop, 
    [date] & " " & [start time] AS Start,
     IIf([hrstart]>12 And [hrstop]<12,[date]+1 & " " & [stop time],[date] & " " & [stop time]) AS Stop, 
    DateDiff("n",[start],[stop]) AS [Runtime (Min)], 
    [runtime (Min)]/60 AS [Runtime (Hrs)]

enter image description here

但在我的SQL Server端:

我用来检索sql的相同信息的查询是:

  SELECT TOP (100) PERCENT Date, [Unit UPC Base Item], [Item (Optional)], [Preset Number], [Product Group], [Product Group Description], 
    Shift, [Rotation Code],BBD,
    [Operator Name], Supervisor, [Production Line],  
    [Production Line Description], [Bagger Number], StartTime, 
    StopTime, HrStart, HrStop,
    Start, Stop, DATEDIFF(MINUTE, Start, Stop) AS [RunTime Mins], 
    DATEDIFF(MINUTE, Start, Stop) / 60.0 AS [RunTime Hrs]
 FROM (SELECT StartTime, StopTime, HrStart,HrStop, Start, 
    DATEADD(DAY, CASE WHEN HrStart > 12 AND HrStop < 12 THEN 1 ELSE 0 END, Stop) 
    AS Stop 
FROM (SELECT LEFT(CONVERT(TIME, dbo.[Net Weight Tracking].[Start Time]), 5) 
AS StartTime, 
LEFT(CONVERT(TIME, dbo.[Net Weight Tracking].[Stop Time]), 5) AS StopTime, 
DATEPART(HOUR, dbo.[Net Weight Tracking].[Start Time]) AS HrStart, 
DATEPART(HOUR, dbo.[Net Weight Tracking].[Stop Time]) AS HrStop, 
DATEADD(MINUTE, DATEDIFF(MINUTE, 0, CONVERT(TIME, dbo.[Net Weight Tracking].[Start Time])), dbo.[Net Weight Tracking].Date) AS Start, 
DATEADD(MINUTE, DATEDIFF(MINUTE, 0, CONVERT(TIME, dbo.[Net Weight Tracking].[Stop Time])), dbo.[Net Weight Tracking].Date) 
AS Stop

enter image description here

我想知道如何访问能够在hrs中获取运行时间?请帮助??

2 个答案:

答案 0 :(得分:1)

在Access查询中,[Stop](在[Runtime (Min)]中使用)来自IIF()函数,该函数只是if / then / else的MS Access函数。为了重现同样的结果,您需要在SQL Server中复制此if / then / else,而上面没有显示。

此外,SQL Server的相应IF函数是CASE函数,您可以在WHEN子句中插入条件并将其应用于THEN子句,并将其应用于ELSE子句中。 {1}}条款。此外,SQL Server 2012确实使用IIF函数。

另请注意,在SQL Server中,您无法在同一查询中引用计算列的别名,这意味着与Access查询不同,您必须重新写出特定表达式中使用的其他公式。

答案 1 :(得分:1)

您的查询对我来说似乎没问题,如果这是唯一给出错误的行,那么在尝试更新停止时间时可能会出现错误,那么我要做的是尝试手动更新STOP到2013年10月7日,看看是否能解决您的问题,我的猜测是因为停止时间为空,它会将您的查询评估为以下内容:

Start, Stop, DATEDIFF(MINUTE, Start, null) AS [RunTime Mins], 
    DATEDIFF(MINUTE, Start, null) / 60.0 AS [RunTime Hrs]

以上结果为null,这是所有其他3列为空的原因:

RunTimeMins,RunTimeHrs,Stop Time为空,因为它是从Stop

派生的