如何将此字符串转换为十进制
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。
我有这个字符串“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。