You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redshift SQL正则提取:从URL中获取最后一个name参数对应值

提取Redshift SQL中最后一次出现的name参数值

正则表达式方案(推荐)

使用Redshift内置的REGEXP_SUBSTR函数,结合正则匹配逻辑直接提取目标内容:

SELECT 
  REGEXP_SUBSTR(
    url, 
    'name[=%]([^&]+)(?:&|$)', 
    1, 
    1, 
    'e'
  ) AS extracted_name
FROM your_table;

正则规则说明:

  • name[=%]:精准匹配最后一次出现的name,并匹配其后紧跟的=或%符号
  • ([^&]+):捕获=/%之后到下一个&之前的所有字符(即我们需要的目标值)
  • (?:&|$):匹配结束边界,要么是参数分隔符&,要么是字符串结尾(非捕获组,不干扰结果提取)
  • 参数1,1:指定从字符串起始位置开始匹配,取第一个有效匹配结果(正则的贪婪特性会自动定位到最后一次出现的name)
  • 参数'e':表示直接返回捕获组中的内容,无需额外处理

测试验证

针对你提供的测试字符串:

http://bunnytalks.com/goingOn?name=Bunny&phone=2340
http://bunnytalks.com/goingOn?name=Bunny
http://bunnytalks.com/goingOn?name=Talks/whatson%goingOn%name%Bunny
http://bunnytalks.com/goingOn?name=Talks/whatson%goingOn%name%Bunny&phone=2340

执行上述SQL后,所有结果均返回Bunny,完全符合需求。

纯字符串操作方案(备选)

如果偏好不用正则,可通过字符串反转、截取再反转的逻辑实现:

SELECT 
  REVERSE(
    SUBSTRING(
      REVERSE(url), 
      CASE WHEN POSITION('&' IN REVERSE(url)) = 0 THEN 1 ELSE POSITION('&' IN REVERSE(url)) + 1 END, 
      POSITION('eman' IN REVERSE(url)) - CASE WHEN POSITION('&' IN REVERSE(url)) = 0 THEN 1 ELSE POSITION('&' IN REVERSE(url)) + 1 END - 2
    )
  ) AS extracted_name
FROM your_table;

该方法通过反转字符串,将“找最后一次出现的name”转化为“找第一次出现的eman”,再截取目标区间后反转还原。不过可读性弱于正则方案,仅作为备选。

内容的提问来源于stack exchange,提问作者Bunny Talks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:50:33