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、停止时间为空,因为它是从停止派生的
我有一个访问查询,需要开始和停止以及 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、停止时间为空,因为它是从停止派生的