在HIVE中删除部分字符串

时间:2017-09-12 15:54:05

标签: sql hadoop hive

我正在尝试删除HIVE中的一部分字符串。我想删除列中所有记录的最后11个字符。数据如下:

  

1018492743 | 0001-01-01

我希望它看起来像:

  

1018492743

我尝试过的代码如下:

选择右侧(a.ord_id,len(a.ord_id)-ll)

它不起作用,因为len不是HIVE中的一个功能

我遇到的另一个问题是某些记录的格式正确。这是否意味着我需要创建一个检查这个的case语句?

3 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

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

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

行 1018492743