如何将此String转换为Decimal

时间:2017-11-15 21:05:54

标签: sql impala

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

3 个答案:

答案 0 :(得分:1)

问题可能是逗号。在某些数据库中,某些功能并不像(我认为)那样具有国际敏感性。所以试试:

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

答案 1 :(得分:0)

您需要转换为可以容纳值5666.232343的小数   DECIMAL(7,5)允许使用以下格式的数字:##。#####。你可以拥有的最大数字是99.99999。您还需要使用逗号并将其替换为句点:

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

答案 2 :(得分:0)

Zorkolot是对的。您使用的当前精确度和比例对于您提供的价值来说还不够。

如果您正在使用 SQL Server 2012或更高版本,并且希望将逗号保留在值中,则可以使用 TRY_PARSE 功能并设置的文化即可。如果遇到错误而不是没有完成语句并返回红色文本,它将返回 NULL 。如果您愿意,还可以通过获取失败的转换返回零值来为语句添加基本错误处理。例如:

这是我的错误处理修复的原始查询(当前是错误的):

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