Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 删除配置单元中字符串的一部分_Sql_String_Hadoop_Hive_Hiveql - Fatal编程技术网

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

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

我正在尝试删除配置单元中字符串的一部分。我想删除列中所有记录的最后十一个字符。数据如下所示:

1018492743 | 0001-01-01

我希望它看起来像:

1018492743

我尝试过的代码如下所示:

选择右侧(a.ord\U id,len(a.ord\U id)-ll)

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


我遇到的另一个问题是,一些记录的格式已经正确。这是否意味着我需要创建一个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