【问题标题】:How to replace a mySQL column that contains specific text?如何替换包含特定文本的 mySQL 列?
【发布时间】:2018-12-19 17:36:17
【问题描述】:

我有表格“行为”和一列“网址”。 “url”列包含如下几行。

我想要做的是更改列“url”的行,例如

/this-is/the-main-url?fbclid=IwAR1VIvXLBSIs4S_eRc4FGVYhIsiViWPEBBSmpkHMatjAcH0Rh-_u4VGoo

/this-is/the-main-url

还有这个

/here-is/another-url?utm_source=facebook&utm_medium=cpc&utm_campaign=fb.traffic

/here-is/another-url

行为表。

所以,如果字符串包含?fbclid?utm_source 保留所有内容。

这也可以通过使用多个查询来完成,而不是一个复杂的。

注意: utm_source或者fbclid,参数和id可以是多种多样的,所以我需要一个动态的解决方案。

谢谢

【问题讨论】:

  • 用 REGEXP 替换可能吗?
  • @Kurohige 的“基本”网址不一样,但不同。您链接中的示例是相同的。
  • 这个问题与mysql, sql, mysqli有什么关系?
  • @Alex 我更新了我的问题

标签: mysql sql substring


【解决方案1】:

MySQLSUBSTRING_INDEX功能很方便。

https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring-index

示范

SELECT SUBSTRING_INDEX(
         SUBSTRING_INDEX(
           t.foo 
           ,'?fbclid'
           ,1
         )
         ,'?utm_source'
         ,1
       )
  FROM ( SELECT '/this-is/the-main-url?fbclid=IwAR1VIvXLBSIs4S_eRc4FGVYhIsiViWPEBBSmpkHMatjAcH0Rh-_u4VGoo' AS foo 
         UNION ALL SELECT '/here-is/another-url?utm_source=facebook&utm_medium=cpc&utm_campaign=fb.traffic'
       ) t

一旦我们的表达式工作并经过测试,我们就可以在UPDATE 语句中使用这些表达式。但我们想先测试SELECT 语句中的表达式。

 UPDATE mytable 
    SET mycol = SUBSTRING_INDEX( mycol ,'?fbclid',1) 

跟进

原始问题中的规范是从字符串中删除字符串'?fbclid'?utm_source

问题现在更新为“参数和 id 可以是多种多样的,所以我需要一个动态解决方案。”

如果我们只想在第一个问号字符之后(包括)切掉所有内容,那么我们可以这样做:

  SUBSTRING_INDEX( myurl ,'?',1)

如果我们想留下一些问号字符,只剪掉某些字符串,那么我们可以多次调用SUBSTRING_INDEX

为了使这更加动态,我们可以为每个分隔符调用SUBSTRING_INDEX,并将分隔符参数(第二个参数)作为参数传递给SUBSTRING_INDEX

【讨论】:

  • 嗨,我对我的问题进行了一些更新,需要更动态的方法。
【解决方案2】:

这确实可行:

select substring(colname,1,instr(colname,'?')-1) from tablename;

整体更改列:

update tablename set colname=
select substring(colname,1,instr(colname,'?')-1) from tablename;

【讨论】:

    猜你喜欢
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多