【问题标题】:SQL Server 2008 varchar to decimal results in: "Error converting data type varchar to numeric"SQL Server 2008 varchar to decimal 导致:“将数据类型 varchar 转换为数字时出错”
【发布时间】:2011-11-30 15:10:06
【问题描述】:

我正在尝试将存储为 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))

【问题讨论】:

    标签: sql-server casting decimal numeric varchar


    【解决方案1】:

    我怀疑它是您的语言环境设置。您的语言环境使用逗号作为小数点,使用句点作为分隔符。您的 sql server 可能设置为默认的美国英语,反之亦然,句点作为小数点,逗号作为分隔符。

    【讨论】:

    • 无论语言环境如何,我认为 SQL 都无法处理包含分组字符的 varchar 转换。
    【解决方案2】:

    您错过了 6.999,50 不是有效小数这一事实。你肯定不能在十进制值中有逗号和小数点吗?它应该是什么数字?

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

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

    将产生 6999,50 作为小数

    【讨论】:

    • 结果的格式应该是:十进制(11,2)。所以我想我需要一个过滤分组数字的函数?
    • 我用替换示例编辑了我的答案以删除“。”字符。
    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多