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

时间:2016-12-08 22:24:22

标签: sql netezza

我在构建Netezza查询的输出时遇到了麻烦。我正在处理网络数据,需要能够计算接收流量的不同网址。问题是大多数行包含在计数之前需要剥离的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
  • NULL
  • NULL

你可以在这里看到,如果我的网址包含问号,我会得到我想要的确切结果。如果它不包含URL参数,则它根本不返回任何内容。

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

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

我还是Netezza的新手,我没有看到我需要的逻辑或运算符。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

这应该有效:

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