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

Access calculates date but sql is making it null?

我有一个访问查询,需要开始和停止以及 returns 运行 时间(以分钟为单位),然后基于 运行 时间(以分钟为单位)和 运行 时间(以小时为单位)计算:

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

 [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)]

但是在我的 SQL 服务器端:

我用来为 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

我想知道 access 如何获得 运行 小时的时间??请帮忙??

在 Access 查询中,[Stop](在 [Runtime (Min)] 中使用是从 IIF() 函数导出的,该函数只是 if/then/else 的 MS Access 函数。为了重现相同的结果,您需要在上面未显示的 SQL 服务器中复制此 if/then/else。

另外,SQL服务器对应的IF函数是CASE function where you insert the condition in a WHEN clause and apply it to a THEN clause and for its false outcome in an ELSE clause. Aside, SQL Server 2012 does use the IIF函数

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

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

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

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

RunTimeMins、RunTimeHrs、停止时间为空,因为它是从停止派生的