【问题标题】:NULLIF in SQL Loader to compare a string valueSQL Loader 中的 NULLIF 用于比较字符串值
【发布时间】:2015-10-30 10:20:52
【问题描述】:

我有一个包含简单行的文件,我想使用 sql 加载器将其上传到表中。

但是,有一列包含我要排除的值:

e.r.

123;Código Postal *;HH;456
523;Código Postal *;HI;459
723;Código Postal *;HM;450

我要排除并指定为 NULL 的列是值“Código Postal *”。

我想修改我的控制文件来排除这个值,但是不可能。

我已经用进控制文件了:

 EC_CONS_ZIP_CODE  "DECODE(:EC_CONS_ZIP_CODE,'Código Postal%',NULL,:EC_CONS_ZIP_CODE)"

但不起作用,因为我有一个特殊字符(“*”和“ó”)

有没有办法避免这种字符使用它或其他方式?

是否可以使用控制文件为该单词分配模式?

问候!!

【问题讨论】:

    标签: oracle sql-loader nullif


    【解决方案1】:

    在控制文件中设置字符集为utf8

    CHARACTERSET UTF8
    

    另一种方法是使用正则表达式

    EC_CONS_ZIP_CODE  " REGEXP_REPLACE(:EC_CONS_ZIP_CODE,'C.digo Postal.*','')"
    

    或者尝试使用 ó (00F3) 的特定 Unicode 编码

    EC_CONS_ZIP_CODE  " REGEXP_REPLACE(:EC_CONS_ZIP_CODE,'C' || unistr('\00F3')|| 'digo Postal.*','')"
    

    【讨论】:

      【解决方案2】:

      在控制文件中将该列标记为FILLER 以忽略文件中的该字段并节省为每一行调用 REGEXP_REPLACE 的开销。 Oracle 将为您填充 NULL:

      ...
      EC_CONS_ZIP_CODE FILLER,
      ... 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-19
        • 1970-01-01
        • 2015-06-17
        • 1970-01-01
        • 1970-01-01
        • 2016-04-27
        • 1970-01-01
        相关资源
        最近更新 更多