动态生成小数点

时间:2017-03-23 07:45:14

标签: sql sql-server sql-server-2008

我需要根据表格中提供的列比较小数点。我知道这需要动态完成,但还有其他方法可以实现吗?

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)

1 个答案:

答案 0 :(得分:5)

圆函数允许您传递一个字段来设置小数位数。

select * 
from #temp 
where round(Value1, DPtoCompare, 1) = round(Value2, DPtoCompare, 1)

如果要将值缩小为n个小数而不是舍入它们,请将Round的第三个参数设置为1。