将逗号分隔的 varchar 转换为十进制

问题描述 投票:0回答:2

我在数据库中有一个列,例如;

new_profittl
------------
45,1000
84,0400
156,6500
169,1800
...

我的代码;

SELECT SUM(CAST(new_profittl as DECIMAL(18,2)))
FROM new_hotelreservation AS R
WHERE DATEADD(hour, DATEDIFF(hour, getUTCdate(), GETDATE()),R.new_salesdate)
      BETWEEN @bas AND @bit AND R.statecode=0

我必须对这个字段求和。该字段是 NVARCHAR,并用逗号而不是点分隔。所以我无法对这个字段求和。我尝试转换或转换为十进制,但没有。它给出了错误“将数据类型 nvarchar 转换为数字时出错。”。

我如何对这个字段求和?

sql type-conversion decimal varchar
2个回答
9
投票

从短期来看,这应该可以解决问题:

sum(cast(replace(new_profitt1, ',', '.') as decimal(18,2)))

但是,我可以看到由此产生的许多并发症(多个逗号、没有逗号、嵌入空格等),所以请密切关注。


-2
投票
cast(replace(new_profitt1, ',', '') as decimal(18,2))

上面的代码将完美地将包含逗号的varchar字段转换为十进制。

例如

旧_列 -> 新_列

1,951.13 -> 1951.13

© www.soinside.com 2019 - 2024. All rights reserved.