hql中的sql子串抽取

4dc9hkyq  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(457)

我的配置单元数据库中有一个url字段是字符串类型,具有以下特定模式:
/猫-g294078-o303631-maine\u coon\u and\u tabby.html
我想提取字符串末尾附近的两个cat“类型”,结果如下:
缅因州
基本上,我只想提取-作为一个小写字符串-cat“types”,它总是由“\u”和“\u”分隔,前面是“-”,后面是“.html”。
在hql中有没有一种简单的方法可以做到这一点?我知道hql的功能有限,否则我会使用regexp或substring之类的东西。
谢谢,克拉克

lf3rwulv

lf3rwulv1#

hql确实有一个 substr 此处引用的功能:https://cwiki.apache.org/confluence/display/hive/languagemanual+udf#languagemanualudf-stringfunctions返回从某个值开始到结束(或特定长度)的字符串片段
我也会利用这个功能 locate 以确定'-'和'.'在url中的位置。
只要总是有三个破折号和三个下划线,这应该是相当直接的。
否则可能需要case语句来确定破折号和下划线的数量。

cuxqih21

cuxqih212#

解决方案在这里。。。

  1. LOWER(REGEXP_REPLACE(SUBSTRING(catString, LOCATE('-', catString, 19)+1), '(_to_)|(\.html)|_', ''))

有趣的是,下面的方法不起作用。。。jjford3,知道为什么吗?

  1. LOWER(REGEXP_EXTRACT(SUBSTRING(FL.url, LOCATE('-', FL.url, 19)+1), '[^(_to_)|(\.html)|_]', 0))

相关问题