SQL Loader中的NULLIF用于比较字符串值

时间:2015-10-30 10:20:53

标签: oracle sql-loader nullif

我有一个包含简单行的文件,我想使用sql loader上传到表中。

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

e.r。

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

我要排除并指向NULL的列是值“CódigoPostal*”。

我想修改我的控制文件以排除此值,但是不可能。

我已经习惯了控制文件:

select a.custid,
       sum(case when d.transaction_type = 'Deposit' then 1 end) as DepositCount,
       sum(case when d.transaction_type = 'Withdrawal' then 1 end) as WithdrawalCount,
from account a
join trandetails d on a.acnumber = d.acnumber
where a.custid = 'C00001'
group by a.custid

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

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

是否可以使用控制文件为此单词指定模式?

此致!!

2 个答案:

答案 0 :(得分:1)

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

CHARACTERSET UTF8

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

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

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

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

答案 1 :(得分:0)

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

let placemark = MKPlacemark(coordinate: self.coordinate, addressDictionary: addressDict)