【问题标题】:how to get rid off decimals from sql results如何从sql结果中去掉小数
【发布时间】:2015-02-20 22:26:36
【问题描述】:

我正在计算总小时/分钟,但我想去掉小数,只显示 2.00 小时或 2.5 小时等。我现在得到这样的东西:2.000000 并且只想限制为 2 位小数仅限。

 select DATEDIFF(minute, Min(FullDatetime), Max(FullDatetime)) / 60.0 as hours
  from  myTable
  where userid = 123

【问题讨论】:

  • 显示的格式化值通常最好留给您的应用程序代码,而不是由数据库执行。

标签: sql sql-server tsql


【解决方案1】:

您可以通过四舍五入来实现,但最简单的方法是使用 FORMAT() 格式化输出。

 select FORMAT(DATEDIFF(minute, Min(FullDatetime), Max(FullDatetime)) / 60.0, 'N2') as hours
  from  myTable
  where userid = 123

有用的原始文档:here

【讨论】:

  • 这是我得到的错误:参数数据类型 int 对于格式函数的参数 2 无效。
  • 我的错,看到标签是 sql-server 而不是 mysql...现在更正
【解决方案2】:

尝试使用

 cast('values' as decimal(18,2))   --2 decimal place.

 select Cast((DATEDIFF(minute, Min(FullDatetime), Max(FullDatetime)) / 60.0 as hours)as decimal(18,2))
  from  myTable
  where userid = 123

【讨论】:

    【解决方案3】:

    有几个选项。 当不需要四舍五入时,我更喜欢使用以下内容

    FORMAT(value, 'N2')
    

    SQL - Rounding off to 2 decimal places

    how to get 2 digits after decimal point in tsql?

    【讨论】:

      【解决方案4】:

      只需使用 ROUND 函数,例如:SELECT ROUND(columnName,decimals) from table

      【讨论】:

        【解决方案5】:

        您可以使用STRCONVERT 函数:

        DECLARE @v NUMERIC(19, 6)
        SET     @v = 2.189189
        
        SELECT STR(@v, 19, 2) AS Method1_Result_VARCHAR, CONVERT(NUMERIC(15, 2), @v) AS Method2_Result_NUMERIC
        /*
        Method1_Result_VARCHAR Method2_Result_NUMERIC
        ---------------------- ----------------------
                       2.19    2.19
        */
        

        注意:STR 函数的第一个参数是浮点类型,这意味着 1) SQL Server 会将此参数从 numeric 转换为 float 和 2) 方法 1 使用非确定性表达式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多