Netezza SQL 查询中的字符串运算符

Posted

技术标签:

【中文标题】Netezza SQL 查询中的字符串运算符【英文标题】:String Operators in Netezza SQL Query 【发布时间】:2016-12-08 22:24:21 【问题描述】:

我在构建 Netezza 查询的输出时遇到问题。我正在处理网络数据,需要能够计算接收流量的不同 URL。问题是大多数行都包含在计数之前需要删除的 URL 参数。

这是我的 URL 的样子:

www.site.com/page?utm_source=xxx&utm_campaign=yyy www.site.com/another?cmp_code=zzz&cmp_vendor=aaa www.site.com/page?cmp_code=nnn&cmp_vendor=bbb www.site.com/another www.site.com/something

我想返回的是这样的:

www.site.com/page www.site.com/another www.site.com/page www.site.com/another www.site.com/something

我的查询如下。它运行没有错误,但它没有产生我想要的结果。

SELECT UID, TIMESTAMP, SUBSTR(FULL_URL, 1, INSTR(FULL_URL, '?', -1) AS MY_URL
FROM MY.TABLE
LIMIT 100;

这是结果

www.site.com/page www.site.com/another www.site.com/page 空 空

您可以在此处看到,如果我的 URL 包含问号,我将得到我想要的确切结果。如果它不包含 URL 参数,那么它什么也不返回。

我也尝试过正则表达式方法,但目前这给了我一个Count field incorrect 错误。

SELECT UID, TIMESTAMP, REGEXP_REPACE(FULL_URL, (\.\+)(\/?)(\.\*), $1) AS MY_URL
FROM MY.TABLE
LIMIT 100;

我还是 Netezza 的新手,我没有看到完成此操作所需的逻辑或运算符。谁能指出我正确的方向?

【问题讨论】:

试试regexp_extract(full_url,'^[^?]+') 这正是我所需要的。感谢您的帮助! 【参考方案1】:

这应该可行:

create temp table myTable ( Full_URL varchar(5000));
insert into myTable values('www.site.com/page?utm_source=xxx&utm_campaign=yyy');
insert into myTable values('www.site.com/another?cmp_code=zzz&cmp_vendor=aaa');
insert into myTable values('www.site.com/page?cmp_code=nnn&cmp_vendor=bbb');
insert into myTable values('www.site.com/another');
insert into myTable values('www.site.com/something');  

select regexp_replace(Full_URL,'\?.*','')
from myTable

【讨论】:

以上是关于Netezza SQL 查询中的字符串运算符的主要内容,如果未能解决你的问题,请参考以下文章

/=/ 在 Netezza 中是啥意思?

改进在 WHERE 子句中包含数百个字符串的 Netezza SQL 查询

通过删除执行计划中的排序运算符来优化 SQL 查询

对 jcrBrowser 的 sql 查询中的运算符 IN 不起作用

Apache Druid的SQL查询使用手册

Sql Server LIKE 查询中需要转义哪些字符[重复]