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 查询中的字符串运算符的主要内容,如果未能解决你的问题,请参考以下文章
改进在 WHERE 子句中包含数百个字符串的 Netezza SQL 查询