首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Impala substr不能正确地获得utf8字符

Impala substr不能正确地获得utf8字符
EN

Stack Overflow用户
提问于 2021-03-26 03:00:44
回答 1查看 387关注 0票数 1

我是ETL的新手,我被分配了一项任务,在将数据提供给客户之前对一些敏感信息进行消毒。

我正在使用色彩网页客户端与Impala。

我想做的是:

例如,像'京客隆(三里屯店)'这样的列信息,然后我需要将其转换为类似于'京XXX店)'的内容。

我的问题是:

代码语言:javascript
运行
复制
select '京客隆(三里屯店)', concat(substr('京客隆(三里屯店)', 1, 3), 'XXX', substr('京客隆(三里屯店)', char_length('京客隆(三里屯店)') -6, 6));

但在输出中我会胡说八道:

代码语言:javascript
运行
复制
'京客隆(三里屯店)' | concat(substr('京客隆(三里屯店)', 1, 3), 'xxx', substr('京客隆(三里屯店)', char_length('京客隆(三里屯店)') - 6, 6))    
京客隆(三里屯店)   |   京XXX�店� 

问题是:

select '京客隆(三里屯店)', substr('京客隆(三里屯店)', char_length('京客隆(三里屯店)') -3 , 3);

输出:京客隆(三里屯店) ��

不能得到正确的字符。为什么会这样?我在python中粘贴了字符串,如果只使用最后3个字节,就可以得到正确的字符。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-26 03:25:33

结果,我误解了函数substr

substr(STRING a, INT start [, INT len])

它将字符从(包括) INT start开始。例如,我的字符串'京客隆(三里屯店)'的总长度是27字节,每个utf8字符在这里占3个字节。我需要取最后一个3字节,即,然后我需要编写:

substr('京客隆(三里屯店), 27 - 2 ,3 )

然后获取25, 26, 27 3字节,并正确显示char

更新:

我被告知要使用:

SELECT regexp_replace('京客隆(三里屯店)', '(.)(.*)(.{2})', '\\1***\\3');

就像一种魅力:P。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66810438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档