1、问题原因
数据文本中部分字段包含换行符(\r\n),导致入仓后数据异常
2、解决思路
将包含换行符的字段,使用函数Replace或Oreplace进行去除
首先引入换行符的概念:
0x0d => \r, carrige return, 指打字头归位的动作(回车),对应ASCII码表中的13
0x0a => \n, new line, 指打字机上卷一行的动作(换行),对应ASCII码表中的10
换行符在不同操作系统中的表现方式:
Windows 在行尾使用 CRLF (carriage return/line feed, 0d/0a)
Unix/Linux 只使用 LF(0a)
根据如上概念,提出如下两种可行性的方案:
-- 入仓前,使用DS抽取数据时去除换行符
SELECT replace(HOLDSTOCK,chr(13)||chr(10),'') from SPDD.CUSTOMER_RELATIVE;
-- 入仓后,在Teradata库中对字段存在换行符的进行修改
UPDATE SDATA.RMO_CUSTOMER_RELATIVE SET HOLDSTOCK = Oreplace(HOLDSTOCK,'0D0A'xc,'');
注:Oreplace是Teradata从Oracle衍生过来的函数,用法与Oracle的Replace类似
注:每次只能提交一个符号,如先回车再换行
在字段中添加换行符的操作:
SELECT 'ABCDEFG'||CHR(13)||CHR(10)||'abcdefg' from dual;