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