Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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 HQL中的子串提取_Sql_Hadoop_Hive_Hql - Fatal编程技术网

Sql HQL中的子串提取

Sql HQL中的子串提取,sql,hadoop,hive,hql,Sql,Hadoop,Hive,Hql,我的配置单元数据库中有一个URL字段,它是字符串类型,具有以下特定模式: /Cats-g294078-o303631-Maine_Coon_和_Tabby.html 我想提取字符串末尾附近的两种Cat类型,结果如下: 缅因州 基本上,我只想提取-作为一个小写字符串-Cat类型,它们总是由“u”和“u”分隔,前面是“-”,后面是“.html” 在HQL中有没有一种简单的方法可以做到这一点?我知道HQL的功能有限,否则我会使用regexp或substring之类的东西 谢谢, 克拉克HQL确实有一个

我的配置单元数据库中有一个URL字段,它是字符串类型,具有以下特定模式:

/Cats-g294078-o303631-Maine_Coon_和_Tabby.html

我想提取字符串末尾附近的两种Cat类型,结果如下:

缅因州

基本上,我只想提取-作为一个小写字符串-Cat类型,它们总是由“u”和“u”分隔,前面是“-”,后面是“.html”

在HQL中有没有一种简单的方法可以做到这一点?我知道HQL的功能有限,否则我会使用regexp或substring之类的东西

谢谢, 克拉克HQL确实有一个substr函数,如下所述: 它返回从一个值开始到结束或特定长度的字符串片段

我还利用函数locate来确定'-'和'.'在URL中的位置

只要总是有三个破折号和三个下划线,这应该是非常直接的

否则,可能需要case语句来确定破折号和下划线的数量

这里的解决方案

LOWER(REGEXP_REPLACE(SUBSTRING(catString, LOCATE('-', catString, 19)+1), '(_to_)|(\.html)|_', ''))
有趣的是,下面的方法不起作用。。。JJFord3,知道为什么吗

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

嘿,JJFord3,谢谢你的提示-经过一些自我教育,我设法一起骗了一些手术,得到了我想要的。确切答案贴在下面。