You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用iff函数修改十进制列中特定值的正确语法咨询

使用iff函数修改十进制列中特定值的正确语法咨询

嘿,我明白你现在的困扰——明明逻辑上没问题,却因为类型不匹配报错,好不容易调整了类型,结果目标值又没被替换成功,确实让人头疼。让我帮你梳理下问题和解决方案:

首先,你遇到的第一个错误「@then data type (long) must match the @else data type (decimal)」是因为你直接写的0是整数类型,而原列TreatmentDelay是十进制(decimal)类型,两个分支返回值类型必须完全一致才行。

而你尝试用todecimal转换后没生效,大概率是因为十进制的精度匹配问题:比如你的TreatmentDelay列可能是带小数位的(比如-1.000),而你转换的todecimal(-1)是-1.0,在严格类型比较下这两个值会被判定为不相等,所以替换逻辑没触发。

给你几个靠谱的解决方案,任选其一就行:

方案1:直接使用带小数的字面量匹配

直接用十进制形式的-1.0和0.0,确保和原列类型完全一致:

NewTreatmentDelay = iff(TreatmentDelay == -1.0, 0.0, TreatmentDelay)

方案2:严格指定十进制精度

如果你的列有固定的小数位数(比如保留6位),可以用DECIMAL函数明确指定精度,保证比较和返回值都和原列匹配:

NewTreatmentDelay = iff(TreatmentDelay == DECIMAL(-1, 18, 6), DECIMAL(0, 18, 6), TreatmentDelay)

这里的18是总位数,6是小数位数,你可以根据自己列的实际设置调整。

方案3:忽略小数位进行匹配

如果你的列里的-1可能带有不同的小数位(比如-1、-1.0、-1.00),可以先把值取整再比较:

NewTreatmentDelay = iff(ROUND(TreatmentDelay, 0) == -1, 0.0, TreatmentDelay)

这几个方法都能解决类型不匹配和值不替换的问题,你可以根据自己的数据情况选最合适的~

备注:内容来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 08:55:31