2010-12-15 243 views
2

我试图用MsSQL将NVARCHAR值转换为货币值。将NVARCHAR转换为货币值

我知道我可以使用类似:

SELECT CONVERT(money, ValueColumn) FROM SomeTable 

但问题是,当我有一个值4352,50,我调用转换方法,该值变为435250,00

什么我错过了吗?我也试过CONVERT(金钱,ValueColumn,2)但没有任何成功。

在此先感谢!

+0

请告诉你在哪个区域工作。对于我住在一个小数分隔的土地上。选择显示错误的所有数字,即NLS修改。对我来说,这完全没问题。我会期待的。作为小数点分隔符(我是程序员而不是商人),结果用小数点显示。为了防止这些NLS干扰,我使用select cast(CONVERT(money,'1.1')as varchar)来获取内部表示 – 2010-12-15 09:39:25

回答

2

SELECT CONVERT(money, REPLACE('4352,50', ',', '.'))

+0

谢谢就是了:D – CyberK 2010-12-15 09:18:24

1

尝试

DECLARE @ValueColumn NVARCHAR(20) 

SELECT @ValueColumn = '4352.50' 

SELECT CONVERT(money, @ValueColumn) 

VS

DECLARE @ValueColumn NVARCHAR(20) 

SELECT @ValueColumn = '4352,50' 

SELECT CONVERT(money, @ValueColumn) 

逗号没有被intepreted作为小数点。

+0

好的,但是如何在不对代码进行硬编码的情况下在查询中使用它?因为它是一个有160.000行的表格...... – CyberK 2010-12-15 09:14:54

+1

您必须先在列上使用替换。像* REPLACE(@ValueColumn,',','。')* – 2010-12-15 09:16:56

0

这是一个黑客位,但如果你的数据的其余部分是相同的格式

numbers , numbers ,

Declare @Value nvarchar(50) 

Set @Value = '4352,50,' 

Select Convert(Money, Substring(@Value, 0, Charindex(',',@value)) + '.' + Substring(@Value, Charindex(',',@Value)+1, 2)) 
2

当你在工作中, - 原样小数点分隔符使用:

SELECT CONVERT(money, REPLACE(ValueColumn, ',', '.')) 
0

SELECT TRY_PARSE('12.345,67'AS Money US'pt-BR')