这是我的 SQL 语句
SELECT ROUND(AVG(column_name), 100)
FROM [database].[dbo].[table]
我检索到的答案可能是 908 行3
之间的数字范围。1 - 5
我需要它说3.0
或3.09
。这可能吗?
这是我的 SQL 语句
SELECT ROUND(AVG(column_name), 100)
FROM [database].[dbo].[table]
我检索到的答案可能是 908 行3
之间的数字范围。1 - 5
我需要它说3.0
或3.09
。这可能吗?
平均值将与值具有相同的数据类型,因此转换值:
SELECT ROUND(AVG(CAST(column_name AS FLOAT)), 2) FROM [database].[dbo].[table]
我不确定这是否会帮助你的骷髅癖,但试试这个
SELECT CAST(AVG(CAST(column_name as DECIMAL(10,2))) AS DECIMAL(10,2))FROM [table_name]
浮点数是近似值,另一方面,小数会使其更加精确,您可能需要阅读浮点数数学和小数。起初我为此感到挣扎,但有时仍然感到迷茫。希望这会帮助你。
在 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();
}
你甚至不需要在ROUND
那里做一个,真的。您可以将您的值转换为DECIMAL
,如下所示:
SELECT AVG(CONVERT(DECIMAL(16,2),YourColumn))
FROM YourTable
我不完全确定您要问什么,但我认为您希望以更高的精度返回数字。
您将调用包装在ROUND函数中,但如果您的列的数据类型没有任何大于 0 的精度(例如 int),则需要先将数据 CAST 或 CONVERT 转换为另一种类型。
以下是一些示例,说明了将数据转换为不同类型的几种方法:
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"
另外,请查看MSDN:数据类型 (Transact-SQL)。
CAST(AVG(column_name) AS DECIMAL(5, 2))
它显示 100 为 100.00 和 100.05 为 100.05