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

时间:2019-07-20 02:48:06

标签: sql sql-server casting type-conversion 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;

Fyi,此列包含“无收入”,“两个”,“ revenue22”,“ 5.5”之类的值

获取错误:

  

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

2 个答案:

答案 0 :(得分:1)

isnumeric()返回一个fs.writeFileSync,因此当您执行integer时,CASE pci1__c WHEN isnumeric(...) ...(即一个pci1__c)将与一个{{1} }。为了能够进行比较,DBMS希望将varchar转换为integer。由于(预期)varchar表示形式不包含小数点,因此失败。

自2012年try_convert()起可用。它将在可能的情况下进行转换,否则返回integer

integer

答案 1 :(得分:0)

如果您想使用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];