如何将此字符串转换为十进制

how to convert this String to Decimal

我有这个字符串“5666,232343”,我想将它转换为十进制,我使用 cast('5666,232343' as decimal(7,5)) 但它是 returns NULL 值。 你知道为什么它不适用于 CAST

您需要转换为可以容纳 5666.232343 值的小数。
DECIMAL(7,5) 允许此格式的数字:##.#####。您可以拥有的最大数字是 99.99999。你还需要把逗号去掉,换成句号:

SELECT CAST('5666.232343' as decimal(16,6)) AS [DecimalValue]

问题可能出在逗号上。在某些数据库中,某些功能没有(我认为)应有的国际敏感度。所以尝试:

cast(replace('5666,232343', ',', '.') as decimal(7, 5))

Zorkolot 是对的。您当前使用的精度和小数位数不足以满足您提供的值。

如果您使用的是 SQL Server 2012 或更高版本 并且您希望在值中保留逗号,那么您可以使用 TRY_PARSE 函数并设置 文化 。如果遇到错误而不是未完成语句和 returning 红色文本,它将 return NULL。如果需要,这还允许您通过将失败转换为 return 零值来向语句添加基本错误处理。例如:

这是你的原始查询(目前有错误),我的错误处理修复了:

select coalesce(try_parse('5666,232343' as decimal(7,5) using 'en-GB'),'0') as [DecimalValue]

这和上面一样,但是我修改了小数精度和小数位数,以便成功转换该值:

select coalesce(try_parse('5666,232343' as decimal(16,6) using 'en-GB'),'0') as [DecimalValue]

这应该可以避免您必须手动或使用 SQL 函数执行 REPLACE