【问题标题】:String Operators in Netezza SQL QueryNetezza SQL 查询中的字符串运算符
【发布时间】: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,'^[^?]+')
  • 这正是我所需要的。感谢您的帮助!

标签: sql netezza


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 2012-07-15
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    相关资源
    最近更新 更多