删除配置单元中字符串的一部分

j0pj023g  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(436)

我正在尝试删除配置单元中字符串的一部分。我想删除列中所有记录的最后11个字符。数据如下所示:
1018492743|0001-01-01
我希望它看起来像:
1018492743
我尝试过的代码如下所示:
选择右(a.ord\U id,长度(a.ord\U id)-ll)
它不起作用,因为len不是hive中的函数
我遇到的另一个问题是,有些记录的格式已经正确了。这是否意味着我需要创建一个case语句来检查这一点?

ycggw6v2

ycggw6v21#

您可以在之前提取数字 | 使用regexp的字符:

hive> select regexp_extract('1018492743|0001-01-01','([0-9]*)\\|',1);
OK
1018492743

或者使用substr获取前10个字符:

hive> select substr('1018492743|0001-01-01',1,10);
OK
1018492743

或者与您描述的完全一样,使用length和substr获得不包含最后11个字符的子字符串:

hive> select substr('1018492743|0001-01-01',1,length('1018492743|0001-01-01')-11);
OK
1018492743

另一个解决方案使用 split() :

hive> select split('1018492743|0001-01-01','\\|')[0];
OK
1018492743

请参阅以下文档:https://cwiki.apache.org/confluence/display/hive/languagemanual+udf

zvms9eto

zvms9eto2#

要从字符串中删除最后11个字符,可以使用:

hive> select substr('1018492743|0001-01-01',1, length('1018492743|0001-01-01')-11);

好的1018492743

c3frrgcw

c3frrgcw3#

hive> select substring_index('1018492743|0001-01-01','|',1);
OK
1018492743

相关问题