2011-10-04 43 views
1

我试图在一个十进制字段中存储一个存储为varchar的值。SQL Server 2008 varchar到十进制的结果是:“将数据类型varchar转换为数字时出错”

以下示例全部导致:“将数据类型varchar转换为数字时出错”。

我在这里失踪了什么?

SELECT CONVERT(decimal(11,2), '6.999,50') 
SELECT CONVERT(decimal(11, 2), '6.999,50') 
SELECT CAST('6.999,50' AS decimal)/100.0 
SELECT CAST((CAST('6.999,50' AS decimal)/100000) AS decimal(17,5)) 

回答

2

您错过了6.999,50不是有效小数的事实。一定不能有逗号和小数点的小数点?它应该是什么数字?

假设您的语言环境指定。为分组,并作为小数点分隔符: 要删除分组数字:

SELECT CONVERT(decimal(11,2), REPLACE('6.999,50', '.', '')) 

将产生6999,50为十进制

+0

结果应该是格式:decimal(11,2)。 所以我想我需要一个函数来过滤分组数字? – HerbalMart

+0

我使用替换示例编辑了我的答案以删除'。'。字符。 –

0

我怀疑它的本地设置。您的区域设置使用逗号作为小数点和句点作为分隔符。你的sql服务器可能被设置为默认的美国英语,这是另一种方式,周期为小数点,逗号为分隔符。

+0

不管语言环境我不认为SQL将应付转换包含分组字符的varchar。 –

相关问题