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

Oracle SQL Loader问题:CSV中"330,000.00"存入Number列仅保留330

解决方案

问题根源

你的控制文件设置了FIELDS TERMINATED BY ',',但CSV中的数值"330,000.00"本身包含逗号,SQL Loader会把这个值拆成两个字段,导致CAPITAL仅取到逗号前的"330",后续的replace处理根本没生效。

可行修正方案

方案1:用引号包裹字段适配(若CSV数值带引号)

如果你的CSV中这类带逗号的数值是用引号包裹的(比如"330,000.00"),直接在控制文件里添加ENCLOSED BY '"',让SQL Loader识别被引号包裹的完整字段:

OPTIONS (SKIP=1)
LOAD DATA
INFILE *
APPEND INTO TABLE test_table
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
TRAILING NULLCOLS
(
    CAPITAL FLOAT "replace(:CAPITAL, ',', '')"
)

方案2:手动指定列位置(无引号场景)

若CSV数值没有引号,通过POSITION明确指定该列的起始和结束位置,避免逗号被当作分隔符(需根据实际CSV列长度调整位置参数):

OPTIONS (SKIP=1)
LOAD DATA
INFILE *
APPEND INTO TABLE test_table
TRAILING NULLCOLS
(
    CAPITAL POSITION(1:10) FLOAT "replace(:CAPITAL, ',', '')"
)

方案3:用FILLER吸收拆分字段(混合分隔场景)

如果其他列用逗号分隔,仅CAPITAL列带逗号,可把拆分后的第二部分定义为临时FILLER字段,再合并两个部分处理:

OPTIONS (SKIP=1)
LOAD DATA
INFILE *
APPEND INTO TABLE test_table
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
    CAPITAL_PART1 CHAR,
    CAPITAL_PART2 FILLER CHAR,
    CAPITAL FLOAT "replace(concat(:CAPITAL_PART1, ',', :CAPITAL_PART2), ',', '')"
    -- 其他列按顺序定义
)

效果验证

修改后SQL Loader会完整读取带逗号的数值,通过replace函数移除逗号后,就能将330000.00正确存入Number类型的CAPITAL列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:32:38