Aza*_*zar 3 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
Run Code Online (Sandbox Code Playgroud)
如果我们尝试以下,我们会得到错误
select * from #temp
where convert(decimal(18,DPtoCompare) , Value1) = convert(decimal(18,DPtoCompare) , Value2)
Run Code Online (Sandbox Code Playgroud)
我尝试了以下,它的工作原理,但想知道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)
Run Code Online (Sandbox Code Playgroud)
round函数允许您传递一个字段来设置小数位数.
select *
from #temp
where round(Value1, DPtoCompare, 1) = round(Value2, DPtoCompare, 1)
Run Code Online (Sandbox Code Playgroud)
如果要将值缩小为n个小数而不是舍入它们,请将Round的第三个参数设置为1.
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |