【问题标题】:Deleting Part of a string in HIVE在 HIVE 中删除部分字符串
【发布时间】:2017-09-12 15:54:04
【问题描述】:

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

1018492743|0001-01-01

我希望它看起来像:

1018492743

我尝试过的代码如下:

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

它不起作用,因为 len 不是 HIVE 中的函数

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

【问题讨论】:

  • substringlength结合使用。

标签: sql string hadoop hive hiveql


【解决方案1】:

您可以使用正则表达式提取| 字符之前的数字:

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

或者完全像您描述的那样使用长度和子字符串来获取没有最后 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

【讨论】:

    【解决方案2】:
    hive> select substring_index('1018492743|0001-01-01','|',1);
    OK
    1018492743
    

    【讨论】:

    • 很好的解决方案,+1
    【解决方案3】:

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

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

    好的 1018492743

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-02
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多