我正在尝试删除配置单元中字符串的一部分。我想删除列中所有记录的最后11个字符。数据如下所示:1018492743|0001-01-01我希望它看起来像:1018492743我尝试过的代码如下所示:选择右(a.ord\U id,长度(a.ord\U id)-ll)它不起作用,因为len不是hive中的函数我遇到的另一个问题是,有些记录的格式已经正确了。这是否意味着我需要创建一个case语句来检查这一点?
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() :
split()
hive> select split('1018492743|0001-01-01','\\|')[0]; OK 1018492743
请参阅以下文档:https://cwiki.apache.org/confluence/display/hive/languagemanual+udf
zvms9eto2#
要从字符串中删除最后11个字符,可以使用:
hive> select substr('1018492743|0001-01-01',1, length('1018492743|0001-01-01')-11);
好的1018492743
c3frrgcw3#
hive> select substring_index('1018492743|0001-01-01','|',1); OK 1018492743
3条答案
按热度按时间ycggw6v21#
您可以在之前提取数字
|
使用regexp的字符:或者使用substr获取前10个字符:
或者与您描述的完全一样,使用length和substr获得不包含最后11个字符的子字符串:
另一个解决方案使用
split()
:请参阅以下文档:https://cwiki.apache.org/confluence/display/hive/languagemanual+udf
zvms9eto2#
要从字符串中删除最后11个字符,可以使用:
好的1018492743
c3frrgcw3#