Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL Server中使用转换函数显示小数点时出现问题_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 在SQL Server中使用转换函数显示小数点时出现问题

Sql server 在SQL Server中使用转换函数显示小数点时出现问题,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我正在做一个课堂作业,在这个问题上我被困了大约两个小时: “投影发票平均总价、最低总价和最高总价。 货币的格式始终为小数点后两位。” 所以,我提出了这个问题: 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)

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

“投影发票平均总价、最低总价和最高总价。 货币的格式始终为小数点后两位。”

所以,我提出了这个问题:

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”

我有点困了。我已经试着查看了关于堆栈溢出的其他问题,但没有找到一个能够解决我的具体问题。任何帮助都将不胜感激

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
数值类型需要第二个参数(scale)返回两位小数。看起来你的观点几乎是对的,但争论是在错误的地方通过的


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

问题在于您正在转换为数字类型。数字类型代表一个数量,所以你应该像思考数学一样思考它们

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;

看看这里:

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

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;

请看这里:

另请参阅,它在不转换为varchar的情况下也可以正常工作。op只是没有正确的DECIMAL()语法。它不需要转换为varchar就可以正常工作。op只是没有正确的DECIMAL()语法。