将数值从 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];