如何修剪SQL Loader的ctl文件中的列数据的新行字符

时间:2016-04-21 09:18:55

标签: sql-server ctl

我的表数据包含从sql loader ctl文件加载的新行字符,一行名为'IPADDRESS',用新行字符加载:

我的ctl文件:

 load data
 INFILE 'abc.txt'
 INTO TABLE TABLENAME
 APPEND
 FIELDS TERMINATED BY '\|'
 (MAKE,
 CUST_ID "UPPER(:CUST_ID)",
 IPADDRESS  "REGEXP_REPLACE(:IPADDRESS, '\\.\\D+', '', 1, 0)"
 )

表格存储中的数据是Ex:

Make CUST_ID        IPADDRESS 
------------------------------
C   MPG-VG-ALG01    "9.7.69.37
"
C   MPG-VG-ALG03    "9.7.69.39
"

示例输入文件数据:

C|mpg-vg-alg01.gdl.mex.ibm.com|9.7.69.37 
C|mpg-vg-alg03.gdl.mex.ibm.com|9.7.69.39 
C|mpg-vg-alg04.gdl.mex.ibm.com|9.7.69.23

2 个答案:

答案 0 :(得分:0)

我的问题的答案是:column_name "REPLACE(:column_name,CHR(13),'')";

答案 1 :(得分:0)

是的,一种选择是使用 REPLACE() 函数,但需要添加更多;

  • 为字符串添加 CHAR(data_length) 任何数据类型,即使它是 VARCHAR2 类型
  • 添加CHR(10)换行)以及CHR(13)回车 )
  • 不要忘记添加嵌套在 TRIM() 中的 REPLACE() 函数以防止额外 也有问题
  • 使用第三个参数是多余的

比如

column_name CHAR(4000) "REPLACE(TRIM(:'||column_name||'),CHR(13)||CHR(10))"'

此外

column_name CHAR(4000) "TRANSLATE(TRIM(:'||column_name||'),CHR(13)||CHR(10),' ')"' 

可以用作替代。