【问题标题】:Trouble displaying decimal points with CONVERT function in SQL Server在 SQL Server 中使用 CONVERT 函数显示小数点时出现问题
【发布时间】:2011-10-21 07:10:48
【问题描述】:

我正在做一个课堂作业,我在这个问题上被困了大约两个小时:

"投影发票平均总价、最低总价、最高总价。 金钱的格式总是保留两位小数。”

所以,我想出了这个查询:

SELECT
CONVERT(DECIMAL(8),AVG(INV.TotalPrice),2) AS 'Average Price',
CONVERT(DECIMAL(8),MIN(INV.TotalPrice),2) AS 'Miniumum Price',
CONVERT(DECIMAL(8),MAX(INV.TotalPrice),2) AS 'Maximum Price'
FROM INVOICE INV;

数学函数运行良好,但我无法得到小数点后的数字,以及价格后的小数点本身。例如,在“平均价格”中,我得到“187”的输出,但我需要“187.00”。

我有点卡住了。我已经尝试过查看 Stack Overflow 上的其他问题,但我还没有找到一个可以解决我的具体问题的问题。任何帮助将不胜感激。

【问题讨论】:

标签: sql-server sql-server-2008


【解决方案1】:
SELECT
CONVERT(DECIMAL(8,2),AVG(INV.TotalPrice)) AS 'Average Price',
CONVERT(DECIMAL(8,2),MIN(INV.TotalPrice)) AS 'Miniumum Price',
CONVERT(DECIMAL(8,2),MAX(INV.TotalPrice)) AS 'Maximum Price'
FROM INVOICE INV;

DECIMAL 数字类型需要第二个参数(刻度)来返回两位小数。看起来您几乎是正确的,但参数传递到了错误的位置。

【讨论】:

    【解决方案2】:

    问题是您正在转换为数字类型。数值类型代表一个数量,因此您应该像思考数学一样思考它们。

    187 == 187.0 == 187.00000 == 187.0000000000
    

    所有这些都是完全相同的值,因此在数字类型中,它们将(通常)以相同的方式表示。

    字符串表示构成值的字符。字符串可以表示诸如“This is a string”或“the quick brown dog”或“235136513509835”之类的文本。

    在字符串中:

    "187" != "187.00" != "187.0000"
    

    基于此,我建议转换为字符串。我没有 Windows 机器,所以无法确认,但请尝试以下操作:

    SELECT
    CAST(CONVERT(DECIMAL(8,2),AVG(INV.TotalPrice)) AS varchar(8)) AS 'Average Price',
    CAST(CONVERT(DECIMAL(8,2),MIN(INV.TotalPrice)) AS varchar(8)) AS 'Miniumum Price',
    CAST(CONVERT(DECIMAL(8,2),MAX(INV.TotalPrice)) AS varchar(8)) AS 'Maximum Price'
    FROM INVOICE INV;
    

    看这里:http://msdn.microsoft.com/en-us/library/ms187928.aspx

    【讨论】:

    • 它可以在不转换为 varchar 的情况下正常工作。该操作只是没有正确的 DECIMAL() 语法。
    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2021-12-13
    相关资源
    最近更新 更多