Sql 删除配置单元中字符串的一部分
我正在尝试删除配置单元中字符串的一部分。我想删除列中所有记录的最后十一个字符。数据如下所示: 1018492743 | 0001-01-01 我希望它看起来像: 1018492743 我尝试过的代码如下所示: 选择右侧(a.ord\U id,len(a.ord\U id)-ll) 它不起作用,因为len不是HIVE中的函数Sql 删除配置单元中字符串的一部分,sql,string,hadoop,hive,hiveql,Sql,String,Hadoop,Hive,Hiveql,我正在尝试删除配置单元中字符串的一部分。我想删除列中所有记录的最后十一个字符。数据如下所示: 1018492743 | 0001-01-01 我希望它看起来像: 1018492743 我尝试过的代码如下所示: 选择右侧(a.ord\U id,len(a.ord\U id)-ll) 它不起作用,因为len不是HIVE中的函数 我遇到的另一个问题是,一些记录的格式已经正确。这是否意味着我需要创建一个case语句来检查这一点?您可以使用regexp提取字符前面的数字: hive> select
我遇到的另一个问题是,一些记录的格式已经正确。这是否意味着我需要创建一个case语句来检查这一点?您可以使用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
hive> select substr('1018492743|0001-01-01',1,length('1018492743|0001-01-01')-11);
OK
1018492743
或者与您描述的一样,使用长度和substr获得不含最后11个字符的子字符串:
hive> select substr('1018492743|0001-01-01',1,10);
OK
1018492743
hive> select substr('1018492743|0001-01-01',1,length('1018492743|0001-01-01')-11);
OK
1018492743
使用split()
请参阅此处的文档:要从可使用的字符串中删除最后11个字符,请执行以下操作:
hive> select substr('1018492743|0001-01-01',1, length('1018492743|0001-01-01')-11);
嗯
1018492743将子字符串
与长度
结合使用。很好的解决方案,+1