Sql server 没有按预期工作的条款
我有以下声明Sql server 没有按预期工作的条款,sql-server,compare,having,Sql Server,Compare,Having,我有以下声明 select pkid from AttendancePosting where datename(dw,AttDate) = 'Sunday' and empid=4 and attdate='2015-12-13' group by PKId,timeout --having 9=9 having cast(sum((datepart(minute, timeout)))/2 as float )+''=cast(datepart(minute,timeout) as f
select pkid
from AttendancePosting
where datename(dw,AttDate) = 'Sunday' and empid=4 and attdate='2015-12-13'
group by PKId,timeout
--having 9=9
having cast(sum((datepart(minute, timeout)))/2 as float )+''=cast(datepart(minute,timeout) as float) +''
问题是
having cast(sum((datepart(minute, timeout)))/2 as float )+''=cast(datepart(minute,timeout) as float) +''
不工作。cast(sum((datepart(minute,timeout)))/2作为float)
和cast(datepart(minute,timeout)作为float)
带来相同的值,但select语句仍然没有获取任何记录,两者都返回9
我已经这样检查过了
select pkid
from AttendancePosting
where datename(dw,AttDate) = 'Sunday' and empid=4 and attdate='2015-12-13'
group by PKId,timeout
having 9=9
它带来的记录,任何帮助都将不胜感激。首先,您的语句
datepart(minute,timeout)/2将返回一个整数。您可以使SQL Server变得更精确,方法是像这样更精确datepart(分钟,超时)/2.
其次,浮点数是一种近似值。最好使用ROUND()
并指定您认为合适的小数位数。例如:round(sum((datepart(minute,timeout)))/2.0,3)
在HAVING
子句中+'
的目的是什么?我删除了它仍然不起作用我认为group by
只返回一条记录和一个超时,因此,当两次偏差时,值不相等。我认为您的第一步应该是避免使用浮点值,因为它们不精确,即使它们看起来应该完全相等,也可能不完全相等。