转换并汇总字符串中的值

时间:2015-04-10 10:59:32

标签: sql sql-server format

如何在这个小提琴示例中从col2求和我的值?

fiddle

我在创建表格时无法更改列的格式,因为正如您在示例中看到的那样,它也包含日期。

我的目标是得到总和的值为-5.646,20

谢谢你现在的所有工作

现在我的下一个问题也是:D如何将第二个查询绑定到第一个查询?我想将它用于合并列。

SELECT col1, COALESCE(col32,col31,col30,col29,col28,col27,col26,col25,col24,col23,col22,col21,col20,col19,col18,col17,col16,col15,col14,col13,col2,col11
,col10,col9,col8,col7,col6,col5,col4,col3,col2) AS Summen from dbo.t2
WHERE LEFT(col1,4) = '1050'

SELECT SUM(convert(decimal(12,2),Replace(Replace(col28, '.' , '') , ',' , '.') ) )
FROM dbo.t2
WHERE LEFT(col1,4) = '1050'

3 个答案:

答案 0 :(得分:1)

your previous question的答案中获取灵感:

SELECT SUM(convert(decimal(12,2),Replace(Replace(col2, '.' , '') , ',' , '.') ) )
FROM test
WHERE col1 NOT IN ('Datum')

嵌套的Replace函数用于更改数字格式的方式。 SQL使用','作为千位分隔符和'。'作为小数点分隔符,我们更改格式以使数据显示为SQL的数字。

答案 1 :(得分:0)

令人讨厌。您可以转换值:

select sum(case when isnumeric(replace(replace(col2, '.', ''), ',', '.'))) = 0
                then cast(replace(replace(col2, '.', ''), ',', '.')) as decimal(20, 8))
           end)

如果您使用的是SQL Server 2012+,请改用try_convert()

select try_convert(decimal(20, 8), replace(replace(col2, '.', ''), ',', '.')) )

我建议将值保留为数字。如果您想拥有数千个分隔符,则可以将其转换为money数据类型。但是,确切的格式(例如,逗号或句点是否用作小数点分隔符)取决于您的国际化设置。

答案 2 :(得分:0)

您可以CONVERTMONEY数据类型:

SELECT SUM(CAST(col2 AS MONEY)) FROM test
WHERE col1 NOT IN ('Datum')