我需要根据表格中提供的列比较小数点。我知道这需要动态完成,但还有其他方法可以实现吗?
create table #temp(Value1 decimal(18,10), Value2 decimal(18,12), DPtoCompare int)
insert into #temp
select 123.45478888, 123.4578888, 3 union
select 23.45478888, 23.4547988, 4 union
select 456.454789, 456.45786, 5 union
select 88.2356789, 88.2356787, 6
如果我们尝试以下操作,我们会收到错误
select * from #temp
where convert(decimal(18,DPtoCompare) , Value1) = convert(decimal(18,DPtoCompare) , Value2)
我尝试了下面的内容,它可以工作,但想知道sql server 2008 R2中是否有任何函数或任何其他可能性,它将直接选择列值并选择小数点。
declare @sql varchar(max)
select @sql = isnull(@sql,'')+'
select Value1, Value2 from #temp
where DPtoCompare = '+CONVERT(varchar, t.DPtoCompare)
+' and convert(decimal(18,'+CONVERT(varchar,t.DPtoCompare)+'), value1) != '
+'convert(decimal(18,'+CONVERT(varchar,t.DPtoCompare)+'), value2)'
from (select distinct DPtoCompare from #temp) t
exec(@sql)
答案 0 :(得分:5)
圆函数允许您传递一个字段来设置小数位数。
select *
from #temp
where round(Value1, DPtoCompare, 1) = round(Value2, DPtoCompare, 1)
如果要将值缩小为n个小数而不是舍入它们,请将Round的第三个参数设置为1。