【发布时间】:2015-06-12 12:16:22
【问题描述】:
我有一个带有 a1 和 a2 浮动列的表格,
a2 中的值是从 a1 计算出来的,因为 a2 = 3*a1
条件是:
如果a1中的值为9.5,我需要得到a2中的上限值 即如果小数点后的数值大于等于5就需要取上限值,否则需要取下限值。
我在下面写了查询
SET a2 =(case when substring(cast((a1 * 3) as varchar(6)),CHARINDEX('.',(a1*3)),1) >=5 then CEILING(a1 * 3) else FLOOR(a1 * 3) end) from table
但它显然会返回以下错误:
转换 varchar 值 '.' 时转换失败数据类型为 int。
既然如此,就不能将varchar带入天花板或地板。
有什么方法可以实现吗?
我们将不胜感激。
a2 的值根据 a1 不断变化,如果 a1 为 4.5,a2 应为上限,如果 a1 为 4.9,a2 应再次为上限,但如果 a1 低于 4.5,则为 4.3,4.2,4.1,则应为底价
除天花板和地板外,任何其他方法也可以。
【问题讨论】:
-
在您的天花板和地板内放置一个转换器
-
请编辑问题并提供示例数据和所需结果。可能有更好的方法来做你想做的事。
-
正如@GordonLinoff 回答的那样,您描述的是 ROUND 函数的作用。
标签: sql sql-server decimal floor ceil