【问题标题】:How to add 0's to an int如何将0添加到int
【发布时间】:2019-01-04 01:01:21
【问题描述】:

我有以下 SQL 查询

SELECT MAX(averageSales)
FROM (
    SELECT AVG(TotalSale) AS averageSales
    FROM [Practice].[dbo].[Sales]
    GROUP BY CAST(SalesPerson AS NVARCHAR(100))
) AS Query1;

我得到的结果为250,但我想将结果显示为250.0000。我查看了 SQL 的 RIGHTLEFT 函数,但还没有弄清楚。 averageSales 的数据类型是 int。

我也尝试了以下方法

SELECT 
    MAX(averageSales), 
    CAST(MAX(averageSales) AS decimal(4,4))
FROM (
    SELECT AVG(TotalSale) AS averageSales 
    FROM [Practice].[dbo].[Sales]
    GROUP BY CAST(SalesPerson AS NVARCHAR(100))
) AS Query1;

但这会导致

将 int 转换为数据类型 numeric 的算术溢出错误。

【问题讨论】:

  • 您确定要将该列设为int 吗?这听起来像一个货币字段..
  • @Blorgbeard,这是我在网上看到的一个练习考试,想自己实施解决方案。所以我复制了他们给我的任何东西。我个人不会将其设为 int 列。
  • 您的decimal(4,4) 声明了一个总数为 4 位的数字(第一个“4”),其中 4 个在小数点后(第二个“4”)。这意味着它可以处理从 0.0000 到 0.9999 的任何值,这就是为什么在尝试转换 250 值时会出现溢出错误的原因。如果将其设为 decimal(8,4),则转换不会产生错误。

标签: sql sql-server tsql number-formatting


【解决方案1】:

使用FORMAT(..., '#.0000'):

SELECT FORMAT(MAX(averageSales), '#.0000') FROM 
(
    SELECT AVG(TotalSale) AS averageSales FROM [Practice].[dbo].[Sales]
    GROUP BY CAST(SalesPerson AS NVARCHAR(100))
) AS Query1;

【讨论】:

  • 即使这个答案是正确的,我强烈建议在前端渲染输出。
【解决方案2】:

使用CASTDECIMAL 而不是NVARCHAR

GROUP BY CAST(SalesPerson as DECIMAL(8,4))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2014-09-09
    • 2015-03-20
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多