Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql oracle正则表达式或内部函数用法_Sql_Regex_Oracle - Fatal编程技术网

Sql oracle正则表达式或内部函数用法

Sql oracle正则表达式或内部函数用法,sql,regex,oracle,Sql,Regex,Oracle,我有一个oracle表,其中有一列数据,如下所示 CREATE TABLE AB ( id varchar2(10), URL varchar2(4000)); INSERT INTO AB (id, url) VALUES ( 1, "https://www.moveloot.com/sf?utm_source=linkedin&utm_medium=paid&utm_co

我有一个oracle表,其中有一列数据,如下所示

CREATE TABLE AB
( id varchar2(10),
  URL varchar2(4000)); 

INSERT INTO AB (id, url)
         VALUES (
                    1,
                    "https://www.moveloot.com/sf?utm_source=linkedin&utm_medium=paid&utm_content=bamboo&utm_campaign=San_Francisco_web_SF_SignUps_LAL_2_1839391141&utm_term=abc-123&utm_content=linked_in_ad-1");

COMMIT;
在oracle sql中,从url提取以下值的最佳方法是什么

utm_source = linkedin
utm_medium = paid
utm_content = bamboo
utm_campaign = San_Francisco_web_SF_SignUps_LAL_2_1839391141
utm_content = linked_in_ad-1

因此,首先要直接回答这个问题:

Oracle直接支持提取与正则表达式()匹配的子字符串,所以我会这样做

SELECT REGEX_REPLACE(
    REGEX_SUBSTR(ab.URL, 'utm_source=[^&]*'),
    'utm_source=',
    '') as UTM_SOURCE,--repeat for each sub-field
FROM AB ab
WHERE ab.id = 1;
这会有用的。。。但这将导致一些真正糟糕的SQL。不仅如此,如果您不得不从Oracle迁移(我的公司正在这么做),这可能需要重写

相反,如果该选项可用,我肯定会在前端进行字符串解析。在代码中,您可以执行以下操作:

Map<String, String> urlParams = new HashMap<String, String>();
if (url.contains("?"))
{
  List<String> paramClauses = url.split("?")[1];
  for(String clause : paramClauses)
  {
    urlParams.put(clause.split("=")[0], clause.split("=")[1]);
  }
}
return urlParams;
Map urlParams=newhashmap();
if(url.contains(“?”)
{
List ParamClaires=url.split(“?”[1];
for(字符串子句:参数子句)
{
urlParams.put(子句.split(“”[0],子句.split(“”[1]);
}
}
返回URL参数;
或者,您可能需要对参数执行实际的关系逻辑。如果是这样的话,我会将它们解析成单独的列(因此utm_源、utm_媒体、utm_内容等各一列)。这涉及到一个数据架构问题,该问题超出了本场馆的范围。。。但是,如果您实际上需要从这些数据中获取url参数,那么这与这里的讨论非常接近