这是我的SQL语句
SELECT ROUND(AVG(column_name), 100)
FROM [database].[dbo].[table]
我检索到的答案是3
,其中可能的数字范围介于908行1 - 5
之间。
我需要它来说3.0
或3.09
。这可能吗?
答案 0 :(得分:95)
平均值将具有与值相同的数据类型,因此强制转换值:
SELECT ROUND(AVG(CAST(column_name AS FLOAT)), 2) FROM [database].[dbo].[table]
答案 1 :(得分:5)
我不确定这是否会帮助你skullomania,但试试这个
SELECT CAST(AVG(CAST(column_name as DECIMAL(10,2))) AS DECIMAL(10,2))FROM [table_name]
浮点数是近似值,另一方面,十进制数将使其更精确,您可能想要读取浮点数数学和小数。我一开始就挣扎着,有时还会感到迷茫。希望这会帮助你。
IN C#
不确定我是否可以在此处发布答案而遇到麻烦,但您是否尝试将其转换为双精度并使用ExecuteScalar()
试试这个:
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection conn= sqlconnectionstring;
SqlCommand cmd = new SQLCommand("SELECT STATEMENT",conn);
cmd.CommandType = CommandType.Text;
conn.Open();
Double result = Convert.ToDouble(cmd.ExecuteScalar());
lblresult.text = "the result is " + result;
conn.Dispose();
cmd.Dispose();
}
答案 2 :(得分:3)
你甚至不需要在那里做ROUND
。您可以将值转换为DECIMAL
,如下所示:
SELECT AVG(CONVERT(DECIMAL(16,2),YourColumn))
FROM YourTable
答案 3 :(得分:2)
我不完全确定你在问什么,但我认为你想要以更高的精度返回数字。
您将调用包装在ROUND函数中,但如果列的数据类型没有大于0的精度(例如int),则需要先将数据CAST或CONVERT转换为其他类型
以下是一些示例,说明了CAST数据到不同类型的几种方法:
SELECT CAST(100 AS decimal(5, 2)) -- Gives you "100.00"
,CAST(100 AS float) --<== Gives you "100"
,CAST(100.0 AS float) --<== Gives you "100"
,CAST(100.01 AS float) --<== Gives you "100.01"
答案 4 :(得分:0)
CAST(AVG(column_name) AS DECIMAL(5, 2))
显示100为100.00 和 100.05为100.05