欢迎投稿

今日深度:

Teradata在SQL中实现字符串替换,

Teradata在SQL中实现字符串替换,


导出接口数据时采用分隔符是比较方便的,用2个字符会比用1个字符更好的规避数据质量问题,今天接数的同事说那边只能支持1个字符分隔。替他着想,选择|作为分隔符,然后再把高危字段执行|替换为空格的逻辑。郁闷的事情来了,居然没找到Teradata中有replace,唉~

我的办法是先找到|所在的位置(没找到就是0),然后从中间劈开,接上空格,就是下面这个公式,其中<fieldname>就是字段名了:

substr(<fieldname>,0,index(<fieldname>,'|')) || ' ' || substr(<fieldname>,index(<fieldname>,'|')+1)
这一办法也适合用于长度大于1的字符串替换,须注意后面就不是+1,而是+length了。

接下去又有新的麻烦了。“東”这个字里面居然有“|”?继续查一下啊,“弢”、“珅”、“韡”这几个字里面也有“|”,嗯,看来“|”是不能用了。老实说,问题的根源还是在对方只支持单个字符作为分隔符(这件事情相当奇怪啊,2013年了居然还有这样的事情?)

咋办呢?技术上肯定是说服对方采用双字符分隔符最好,但是问题是企业内部的精神是业务为导向,容不下技术上追求完美的行为呢。

咋办呢?拼概率吧。嗯,换了个字符“!”,查看一个月内的数据,不会出异常哦。当然了,脏数据里面还是会有“!”这个符号的,既然是脏数据,再脏一些也无所谓了,“!”替换为空格也没啥风险,是吧?

好了,这个问题到此为止。最佳的解决办法仍然是双字符分隔,但是用“!”分隔并且做一些技术性处理,风险也能接受。最后,还是要尝试去说服对方接受双字符分隔,实在是谈不下来,只好埋下一颗“!”地雷并预祝对方值班人员好运了~~~~



 本文转自 hexiaini235 51CTO博客,原文链接:http://blog.51cto.com/idata/1111077,如需转载请自行联系原作者


www.htsjk.Com true http://www.htsjk.com/teradata/25386.html NewsArticle Teradata在SQL中实现字符串替换, 导出接口数据时采用分隔符是比较方便的,用2个字符会比用1个字符更好的规避数据质量问题,今天接数的同事说那边只能支持1个字符分隔。替他着想,...
评论暂时关闭