SQL Server:SUM()仅用于数值,忽略Varchar值

Bil*_*wal 2 sql sql-server-2008-r2

我需要一些帮助,因为我正在学习SQL,所以我处于初级水平.我正在使用SQL Server 2008 R2.

我的问题是:我想(添加)总结一个混合值为varchar和的列decimal.我想忽略varchar值和总和decimal.我的专栏是这样的:

Column1  
-------
0.1  
Z  
0.4  
2.1  
2.1  
Z
Run Code Online (Sandbox Code Playgroud)

我需要在这种情况下的总和应该是: 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
Run Code Online (Sandbox Code Playgroud)

我不善于解释事情,但我希望你能理解我想要做的事情.

如果这个问题已经得到解答,请告诉我该问题的方向和我对此的说法..非常感谢提前:)

Rag*_*ull 7

只需使用以下WHERE条款CAST:

SELECT SUM(Cast(Column1 as numeric(10,2))) as Total
FROM TABLE_Name
Where IsNumeric(Column1) = 1 
Run Code Online (Sandbox Code Playgroud)

结果:

TOTAL
4.7
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle中的示例结果.

编辑:

正如@funkwurm指出的那样,该列有机会获得值'.' (点):

SELECT SUM(Cast(Column1 as numeric(10,2))) as Total
FROM TABLE_Name
Where IsNumeric(Column1 + 'e0') = 1 
Run Code Online (Sandbox Code Playgroud)

小提琴.

  • 非常感谢。真的很快回答:) (2认同)
  • 根据[这个答案](http://stackoverflow.com/a/4522185/2684660),我建议你做`IsNumeric(Column1 +'e0')= 1`.如果我将SqlFiddle更改为`Column1`的值为`.`的行,则会中断. (2认同)