【问题标题】:Decimal values in SQL for dividing resultsSQL中用于划分结果的十进制值
【发布时间】:2011-01-29 03:31:26
【问题描述】:

在 SQL 中,我有 col1col2。两者都是整数。

我想做这样的事情:

select col1/col2 from tbl1

我得到1 的结果col1=3col2=2

我想要的结果是1.1

我输入了round(col1/col2,2)。结果还是 1。

我输入了decimal(col1/col2,2)。小数点不是内置函数。

如何才能获得 1.1?

【问题讨论】:

  • 3除以2等于1.5吗?
  • 什么样的四舍五入给你 3/2 = 1.1?
  • @Blorgbeard:他可能已经自动将其转换为二进制文件。 :)

标签: sql-server sql-server-2005


【解决方案1】:

只是另一种方法:

SELECT col1 * 1.0 / col2 FROM tbl1

乘以 1.0 将整数转换为 float numeric(13,1),因此其工作方式类似于类型转换,但很可能比这慢。

Aleksandr Fedorenko 在评论中建议的稍短的变体:

SELECT col1 * 1. / col2 FROM tbl1

效果基本一样。唯一的区别是这种情况下的乘法结果是numeric(12,0)

主要优势:比其他方法更简洁。

【讨论】:

  • 1. 只是 1.0 的缩写形式吗?
  • @Jackson:从技术上讲,not quite,但从广义上讲,两者都被解释为数字,是的,你可以这么说。
【解决方案2】:

除法之前,您需要将值转换或转换为十进制。看看这个 http://msdn.microsoft.com/en-us/library/aa226054.aspx

例如

DECLARE @num1 int = 3 DECLARE @num2 int = 2

SELECT @num1/@num2

SELECT @num1/CONVERT(decimal(4,2), @num2)

第一个 SELECT 将产生您所看到的内容,而第二个 SELECT 将得到正确答案 1.500000

【讨论】:

    【解决方案3】:

    SELECT CAST (col1 as float) / col2 FROM tbl1

    一个演员应该工作。 (“少即是多。”)

    来自Books Online

    返回具有较高优先级的参数的数据类型。有关数据类型优先级的更多信息,请参阅Data Type Precedence (Transact-SQL)

    如果一个整数除数除以一个整数除数,结果是一个整数,结果的任何小数部分被截断

    【讨论】:

      【解决方案4】:
      CAST( ROUND(columnA *1.00 / columnB, 2) AS FLOAT)
      

      【讨论】:

      • tanx alot
        从这个解决方案中获取百分比必须得到 * 100 :)
      【解决方案5】:

      可能还有其他方法可以获得您想要的结果。

      Declare @a int
      Declare @b int
      SET @a = 3
      SET @b=2
      SELECT cast((cast(@a as float)/ cast(@b as float)) as float)
      

      【讨论】:

        【解决方案6】:

        在除法之前将分母转换为小数,例如

        select col1 / CONVERT(decimal(4,2), col2) from tbl1

        【讨论】:

          猜你喜欢
          • 2018-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-23
          • 1970-01-01
          相关资源
          最近更新 更多