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

如何阻止ADF格式化SQL表负数字符串值及处理特殊值转Money?

解决ADF复制数据时的CSV格式转换问题

一、阻止CSV中-100被转为SQL的(100)

你的CSV列用了Excel会计数字格式,负数会显示成(100),ADF读取时直接把括号当成字符串内容,得先做格式清洗:

方法1:用数据流动预处理(推荐)

  1. 新建数据流动,源选你的CSV文件,在源设置里把目标列的数据类型强制设为String,避免ADF自动推断数字类型搞乱格式。
  2. 添加「派生列」转换,针对该列写替换表达式:
    replace(replace(目标列名, '(', '-'), ')', '')
    
    这个表达式会把(100)直接转成-100,完美还原负号。

方法2:直接在复制活动里改映射

如果不想用数据流动,就在复制数据活动的「映射」选项卡,给目标列加表达式:

@replace(replace(item().sourceValue, '(', '-'), ')', '')

同时要确保CSV数据集的Schema里,该列类型设为String,禁止自动推断。


二、把CSV中的“-”转成SQL money类型的0

在上面的表达式基础上,加个判断逻辑处理单独的“-”:

数据流动里的派生列表达式

iif(目标列名 == '-', '0', replace(replace(目标列名, '(', '-'), ')', ''))

复制活动映射里的表达式

@iif(item().sourceValue == '-', '0', replace(replace(item().sourceValue, '(', '-'), ')', ''))

处理完后,把这个清洗后的字符串列直接映射到SQL的money类型列就行,ADF会自动把0、-100这类字符串转成对应的money值。


验证步骤

  1. 先跑数据流动预览,确认值是否正确:-→0,(100)→-100,100→100。
  2. 再执行复制活动,检查SQL表的money列数据是否符合预期。

内容的提问来源于stack exchange,提问作者SQL_Noob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:10:20