为啥有外来字符时不能正确填充空格字符?

Posted

技术标签:

【中文标题】为啥有外来字符时不能正确填充空格字符?【英文标题】:Why doesn't it pads the space characters correctly when there are foreign characters?为什么有外来字符时不能正确填充空格字符? 【发布时间】:2015-09-23 23:55:53 【问题描述】:

我的目标是导出具有固定宽度列的文件。我有以下 HQL:

insert overwrite table destination_table
select concat(rpad(p.artist_name,40," "),rpad(p.release_name,40," "))
from source_table;

“destination_table”是一个写入文件的外部表。当artist_name 和release_name 包含正常的英文字符时,没有问题,结果如下:

paulo kuong[29 space characters]I am terribly stuck album

我有 40 个字符的固定宽度列。但是,当字符串不是英文时,我得到了:

장재인[31 space characters]다른 누구도 아닌 너에게       

假设为 37 个空格字符。 LPAD 似乎无法正确填充空格。当我执行“length(장재인)”时,它返回 3 个字符。所以 HIVE 中的 lpad 和 rpad 发生了一些奇怪的事情

有什么想法吗?

【问题讨论】:

【参考方案1】:

我认为rpad 按预期工作。根据文件,

rpad(string str, int len, string pad) 
#Returns str, right-padded with pad to a length of len

所以,在您的情况下,장재인[31 space characters] 的长度应该是 40。

简而言之장재인的长度应该是9。


我检查了python,然后장재인的长度确实是9。

>>> a = '장재인'
>>> len(a)
9

【讨论】:

很抱歉问题仍未解决。当我执行“length(장재인)”时,它返回 3 个字符。所以 HIVE 中的 lpad 和 rpad 发生了一些奇怪的事情 你做得怎么样length(장재인)

以上是关于为啥有外来字符时不能正确填充空格字符?的主要内容,如果未能解决你的问题,请参考以下文章

HTML-实体(转义字符)

为啥我的 if 函数没有从字符串中删除空格?它不能检测 C++ 中的空格输入吗?有没有办法从输入中删除空间

用空格填充单词以填充单元格

重复字符串以填充多个空格

为啥我的字符串值在插入 SQL 数据库时会累积空格?

为啥 TO_CHAR 在数字的开头添加空格(一个白色字符)?