Sql 找到特定值时将十进制转换为int
我有一个查询,它使用CTE比较了几周之间的数据。它存储的内容之一是百分比数据。我正在尝试转换或强制转换任何等于100.00的值 例如,下面是结果的样子Sql 找到特定值时将十进制转换为int,sql,Sql,我有一个查询,它使用CTE比较了几周之间的数据。它存储的内容之一是百分比数据。我正在尝试转换或强制转换任何等于100.00的值 例如,下面是结果的样子 Name Percentage Other App1 99.56 5.5 App2 100.00 6 我希望从100中去掉零。我尝试过一些案例陈述,但从未得到我想要的结果。这是我现在拥有的 SELECT f.Application, f.Percentage,
Name Percentage Other
App1 99.56 5.5
App2 100.00 6
我希望从100中去掉零。我尝试过一些案例陈述,但从未得到我想要的结果。这是我现在拥有的
SELECT
f.Application,
f.Percentage,
f.Other,
CASE
WHEN f.Percentage = 100.00
THEN 100
END AS Percentage
FROM Table1 f
当前,100.00的值更改为100。但是,不等于100.00的所有内容都被置零。我可以通过添加
ELSE f.Percentage
但是100.00没有改变
如有任何帮助,我们将不胜感激。正如我在评论中提到的,您不能有一个包含多种数据类型的SQL列 也就是说,它在您的情况下是否有用还有待观察,但是像
nvarchar
这样的字符串类型可以处理这两种类型,尽管您的代码需要能够将它们作为字符串而不是数字来处理
例如:
SELECT
f.Application,
f.Percentage,
f.Other,
CASE
WHEN f.Percentage = 100.00
THEN '100'
ELSE CAST(f.Percentage as nvarchar(10))
END AS Percentage
FROM Table1 f
Percentage
列现在将是nvarchar
类型,但它将以这种方式返回值:
Name Percentage Other
App1 99.56 5.5
App2 100 6
App3 91.23 3.5
App4 94.41 4.8
App5 100 6
正如我在评论中提到的,您不能有一个包含多个数据类型的SQL列 也就是说,它在您的情况下是否有用还有待观察,但是像
nvarchar
这样的字符串类型可以处理这两种类型,尽管您的代码需要能够将它们作为字符串而不是数字来处理
例如:
SELECT
f.Application,
f.Percentage,
f.Other,
CASE
WHEN f.Percentage = 100.00
THEN '100'
ELSE CAST(f.Percentage as nvarchar(10))
END AS Percentage
FROM Table1 f
Percentage
列现在将是nvarchar
类型,但它将以这种方式返回值:
Name Percentage Other
App1 99.56 5.5
App2 100 6
App3 91.23 3.5
App4 94.41 4.8
App5 100 6
SQL字段/列不能包含多种数据类型,这意味着您不能有一条记录具有
float/decimal
值,另一条记录具有int
值。据我所知(尽管这个网站上有很多人比我在SQL中更容易理解),字符串类型(nvarchar
)将能够处理十进制和整数值,当然,您的数据将以字符串值的形式返回。这个查询使用的是什么?为什么额外的.00
很重要?这听起来像是您可以(应该)在显示代码中处理的事情。您将强制转换数据类型与格式化输出字符串相混淆。你需要晚一点。列必须始终具有相同的数据类型,一行不能有一个数据类型,下一行不能有不同的数据类型。您可以将其转换为文本并用'
替换.00
,也可以在报表中使用条件格式。SQL字段/列不能包含多个数据类型,这意味着您不能有一条记录具有浮点/十进制
值,另一条记录具有int
值。据我所知(尽管这个网站上有很多人比我在SQL中更容易理解),字符串类型(nvarchar
)将能够处理十进制和整数值,当然,您的数据将以字符串值的形式返回。这个查询使用的是什么?为什么额外的.00
很重要?这听起来像是您可以(应该)在显示代码中处理的事情。您将强制转换数据类型与格式化输出字符串相混淆。你需要晚一点。一列必须始终具有相同的数据类型,一行不能有一个数据类型,下一行不能有不同的数据类型。您可以将其转换为文本并用'
替换.00
,或者您可以在报表中使用条件格式。由于我创建了两个CTE,然后在最后合并,我是否只需要将这些更改添加到末尾或每个CTE?此外,这些都是在SQL Reporting Services中完成的,因此输入的数据很好。如果CTE结果以小数形式组合成单个结果集,则可以在返回最终结果集时使用此查询包装它们,而不是对每个CTE进行包装。实际上,我刚刚记住的最后一件事是。在我的报告中,我对这些值求和并求平均值。我想如果他们是瓦查尔,这会打破的。在进行计算之前,您必须将它们转换为float
或decimal
:SUM(转换为float的百分比))
@maltman为什么您在查询中转换为字符串,而只是将它们转换回报告中要求和的数字。只需将所有内容保留为数字,并格式化报告中的数字,以删除任何尾随的零!由于我创建了两个CTE,然后在末尾合并,我是否只需要将这些更改添加到末尾或每个CTE?此外,这些都是在SQL Reporting Services中完成的,因此输入的数据很好。如果CTE结果以小数形式组合成单个结果集,则可以在返回最终结果集时使用此查询包装它们,而不是对每个CTE进行包装。实际上,我刚刚记住的最后一件事是。在我的报告中,我对这些值求和并求平均值。我想如果他们是瓦查尔,这会打破的。在进行计算之前,您必须将它们转换为float
或decimal
:SUM(转换为float的百分比))
@maltman为什么您在查询中转换为字符串,而只是将它们转换回报告中要求和的数字。只需将所有内容保留为数字,并格式化报告中的数字,以删除任何尾随的零!