我正在使用MS SQL服务器。我有varchar列,我需要转换为NUMERIC(19,4)。我试图对场进行投射和舍入,但在某些情况下,它似乎截断到4位小数,而不是正确的舍入。例如:17.654593需要是17.6546,而不是仅仅放弃] 93'从最后。我使用下面的内容来更新整个字段。有没有办法添加一轮'到这个脚本,所以它正确更新?
update table_name
SET price = case when isnull(price,'') <> ''
then CAST(CAST(price as FLOAT) as NUMERIC(19,4))
else 0
end
&#13;
答案 0 :(得分:1)
SQL Server 2012或更高版本,解决了舍入问题,将不安全的强制转换解析为NUMERIC,并将NULL值保留为NULL:
update table_name
set price = ISNULL(TRY_CAST(price as NUMERIC(19,4)), price);
SQL Server 2012或更高版本,解决了舍入问题,将不安全的强制转换解析为NUMERIC,将NULL值设置为0:
update table_name
set price = ISNULL(ISNULL(TRY_CAST(price as NUMERIC(19,4)), price), 0);
SQL Server 2008或更高版本,解决了舍入问题,将不安全的强制转换解析为NUMERIC,将NULL值设置为0:
update table_name
set price = case
when price is NULL
then '0'
when ISNUMERIC(price + 'e0') = 1
then CAST(CAST(price as NUMERIC(19,4)) as VARCHAR)
else price
end
如果要阻止NULL转换为0,只需删除第一个when子句。