我有一个表格“ behavior”和一个“ url”列。 “ 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可以多种多样,所以我需要一个动态的解决方案。
谢谢
答案 0 :(得分:1)
MySQL SUBSTRING_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
。
答案 1 :(得分:0)
这确实可以工作:
select substring(colname,1,instr(colname,'?')-1) from tablename;
将列整体更改:
update tablename set colname=
select substring(colname,1,instr(colname,'?')-1) from tablename;