我想在第二个十进制/点之前获取列中的所有内容(列名:test)。该列是字符串格式。
示例:列测试中的数据
a bc.de.fg
k.l.o.p
期望输出
a bc.de
k.l
答案 0 :(得分:1)
您可以创建基于Java的用户定义函数,并将列作为参数传递。
import org.apache.hadoop.hive.ql.exec.UDF;
class UdfClass extends UDF {
public String evaluate(String input) {
String arr[]= input.split(".");
return arr[0]+=arr[1];
}
}
您需要在Hive中创建一个函数:
add jar /path/to/youJar.jar;
create temporary function new_function_name as 'jar_class_name';
之后,您将能够查询:
select new_function_name(test) from teble_name
答案 1 :(得分:0)
这有效:
select
left((left('a bc.de.fg k.l.o.p' , len('a bc.de.fg k.l.o.p')-charindex('.', reverse('a bc.de.fg k.l.o.p'))) )
, len((left('a bc.de.fg k.l.o.p' , len('a bc.de.fg k.l.o.p')-charindex('.', reverse('a bc.de.fg k.l.o.p'))) )
)-charindex('.', reverse((left('a bc.de.fg k.l.o.p' , len('a bc.de.fg k.l.o.p')-charindex('.', reverse('a bc.de.fg k.l.o.p'))) ))))
答案 2 :(得分:0)
使用locate
函数,我们可以在两次迭代中找到第二个“。”的位置。然后使用substr
,我们可以获得从位置1到我们到达的数字的字符串内容。
select
substr("a bc.de.fg k.l.o.p"
,1
,locate(
substr("a bc.de.fg k.l.o.p",
locate("a bc.de.fg k.l.o.p" ,".") +1
,1000
)
,"."
) - 1
)