Oracle 去除或拼接字段内空格、换行符

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;

3、附上百度百科的ASCII码表

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值