我在学习SQL时需要一些帮助,所以我处于初级水平。我正在使用SQL Server 2008 R2。
我的问题是:我想(添加)总结一个混合值为varchar
和decimal
的列。我想忽略varchar
值并仅将decimal
加起来。我的专栏是这样的:
Column1
-------
0.1
Z
0.4
2.1
2.1
Z
我需要在这种情况下的总和应该是:4.7
我尝试使用CASE
但我未能解决它
SELECT
SUM(CASE
WHEN ISNUMERIC(Column1) = 1
THEN .(if true how i add them?).
ELSE .(and if false how i ignore them?).
END) AS Total
FROM
TABLE_Name
我不善于解释事情,但我希望你能理解我想要做的事情。
如果这个问题已经得到解答,请告诉我这个问题的方向和我对此的说明......非常感谢提前:)
答案 0 :(得分:6)
只需将WHERE
子句与CAST
:
SELECT SUM(Cast(Column1 as numeric(10,2))) as Total
FROM TABLE_Name
Where IsNumeric(Column1) = 1
结果:
TOTAL
4.7
SQL Fiddle中的示例结果。
修改强>
正如@funkwurm指出的那样,该专栏有机会获得价值'。' (点):
SELECT SUM(Cast(Column1 as numeric(10,2))) as Total
FROM TABLE_Name
Where IsNumeric(Column1 + 'e0') = 1
答案 1 :(得分:0)
您可以通过添加0来“忽略”一行。
SELECT
SUM(
CASE
WHEN ISNUMERIC(Column1)=1 THEN CONVERT(DECIMAL(10,5), Column1) --add the value to the sum
ELSE 0 --add 0 (i.e. ignore it)
END)
AS Total
FROM
TABLE_Name
答案 2 :(得分:0)
试
select sum(case when isnumeric(cast(Column1 as decimal))
then cast(column1 as decimal) else 0 end) as total from table
假设您的字段是varchar类型
答案 3 :(得分:0)
为什么不使用TRY_CONVERT:
SELECT SUM(TRY_CONVERT(float,Column1) AS Total
FROM TABLE_Name
查询最短,易读!如果转换失败(例如,如果Column1中有文本值)
,则TRY_CONVERT返回NULL此功能自SQL Server 2012以来就存在(我认为)。
@Jim Chen:
在这一点上,Isnumeric有点棘手!在您的解决方案中,如果值为' - '或' +'在列中:
SELECT ISNUMERIC('+') --returns TRUE!
SELECT ISNUMERIC('-') --returns TRUE!
<强> ==&GT; SUM将失败!