执行SQL Server查询时出现问题
我正在尝试运行以下查询:执行SQL Server查询时出现问题,sql,sql-server-2008,Sql,Sql Server 2008,我正在尝试运行以下查询: SELECT A.STEPNAME, A.BRDATE BRDATE_A, B.BRDATE BRDATE_B, MIN(A.STARTTIME) STARTTIME_A, MAX(A.ENDTIME) ENDTIME_A, MIN(B.STARTTIME) STARTTIME_B, MAX(B.ENDTIME) ENDTIME_B, 'RUNTIME_A' = convert(VARCHAR,DATEDIFF(MINU
SELECT
A.STEPNAME,
A.BRDATE BRDATE_A,
B.BRDATE BRDATE_B,
MIN(A.STARTTIME) STARTTIME_A,
MAX(A.ENDTIME) ENDTIME_A,
MIN(B.STARTTIME) STARTTIME_B,
MAX(B.ENDTIME) ENDTIME_B,
'RUNTIME_A' = convert(VARCHAR,DATEDIFF(MINUTE,A.STARTTIME,A.ENDTIME),108) ,
'RUNTIME_B' = convert(VARCHAR,DATEDIFF(MINUTE,B.STARTTIME,B.ENDTIME),108)
FROM
CB_OPX_AUDIT_HIST A,
CB_OPX_AUDIT_HIST B
WHERE
A.BRDATE = ('05/11/2012')
AND
B.BRDATE = ('05/16/2012')
AND
A.BR = '03'
AND
A.STEPNAME=B.STEPNAME
AND
A.BR=B.BR
GROUP BY
A.STEPNAME,
A.ENDTIME,
A.STARTTIME,
A.BRDATE,
B.BRDATE,
B.ENDTIME,
B.STARTTIME
ORDER BY
A.STARTTIME
我需要“RUNTIME_A”和“RUNTIME_B”之间的区别
有人能告诉我如何得到上述查询中的差异吗?将整个查询包装在另一个
SELECT
语句中。在外部select语句中,您只需选择RUNTIME\u A-RUNTIME\u B
您所说的“获取差异”到底是什么意思
你已经在几分钟内得到了差异,它总是少于一天吗
这对你有什么作用
DATEADD(
minute,
DATEDIFF(minute, A.STARTTIME, A.ENDTIME)
-
DATEDIFF(minute, B.STARTTIME, B.ENDTIME),
0
)
或者
为了简单起见,我建议从使用VARCHAR改为使用DATETIME,然后再次运行一个简单的datediff
DATEDIFF(MINUTE,
convert(DATETIME,DATEDIFF(MINUTE,A.STARTTIME,A.ENDTIME),108),
convert(DATETIME,DATEDIFF(MINUTE,B.STARTTIME,B.ENDTIME),108)
)
您可以将原始查询包装为子查询以简化操作。如果
a.STARTTIME
和a.ENDTIME
之间的差异为10分钟,则您的COVERT将生成1900-01-11
,而不是1900-01-01 00:10
。这是因为它会隐式地将10
转换为日期时间,并将其视为以天为单位的值,而不是以分钟为单位的值。[如果唯一的愿望是以分钟为单位计算差异,并且两个DATEDIFF都产生分钟,为什么不从另一个结果中减去一个DATEDIFF结果?]是的,两个结果都将转换为1900-01-01,因此仍然有效。这真的取决于OP真正需要什么意思;根本不要把它们变成约会。。。您已经有了a。开始是距离a.end的X分钟
和b。开始是距离b.end的Y分钟
。那么,为什么不干脆做X-Y
?将X
转换为日期,将Y
转换为日期,然后执行DATEDIFF(分钟,X作为a\u日期,Y作为a\u日期)
的目的是什么?什么数据类型是STARTTIME\u a
和ENDTIME
??我希望这些是DATETIME
!那么你肯定不需要先把它们转换成VARCHAR
——只需在这些日期执行DATEADD
和DATEDIFF
,就可以了。。。
DATEDIFF(MINUTE,
convert(DATETIME,DATEDIFF(MINUTE,A.STARTTIME,A.ENDTIME),108),
convert(DATETIME,DATEDIFF(MINUTE,B.STARTTIME,B.ENDTIME),108)
)