将 varchar 中的数值转换为十进制



将数值从 varchar 数据类型转换为十进制时出错

select 
    case PCI1__c 
       when ISNUMERIC(rtrim(ltrim(PCI1__c))) 
          then convert(decimal(10, 2), PCI1__c)
          else null 
    end as PCI1__c 
from 
    MX_CREDIT_ANALYSIS;

仅供参考,该列包含"无收入"、"两个"、"收入22"、"5.5"等值

收到错误:

将 varchar 值"5.5"转换为数据类型 int 时转换失败。

isnumeric()返回一个integer,所以当你做一个CASE pci1__c WHEN isnumeric(...) ...时,pci1__c,这是一个varchar,被比作一个integer。为了能够进行这种比较,DBMS希望将varchar转换为integer。这将失败,因为(预期(integer表示形式不包含小数点。

自2012年以来,try_convert()可用。它会在可能的情况下进行转换,否则返回NULL .

SELECT try_convert(decimal(10, 2), pci1__c) pci1__c
       FROM mx_credit_analysis;
如果要

使用 CASE ,则

查询

select 
    case when ISNUMERIC(rtrim(ltrim([PCI1__c]))) = 1
    then convert(decimal(10, 2), PCI1__c)
    else null end as PCI1__c 
from [MX_CREDIT_ANALYSIS];

最新更新