提问人:Ubuntubasic1864 提问时间:11/13/2023 更新时间:11/14/2023 访问量:56
MySQL - 如何将随机的 8 个字节数替换为 null
MySQL - How to replace random 8 byte number to null
问:
我在mysql数据库的文本正文中有以下样式url
- A型:https://www.old_example1.com/12345678/myname
- B型:https://www.old_example2.com/87654321/yourname
我想将 url 更改为以下格式
- 类型 A:https://www.new_example1.com/myname
- B型:http://www.new_example2.com/yourname
对于域部分,这是一个简单的替换查询,所以没什么大不了的。但是域后面的 8 字节随机数部分有点棘手。
我尝试计算文本字节并使用子字符串,但“old_example1”和“old_example2”部分并不总是一致的字节。有时长或短 1~2 个字节。但是“/”的出现是一致的,所以我试图找到一种方法来计算“/”并将第 3 和第 4 个“/”替换为“”(空值),但不知道如何应用这样的条件。
答:
1赞
Ergest Basha
11/13/2023
#1
正如 Shadow 在评论中提到的,这是一个 8 位数字,而不是 8 字节数字。
如果你的字符串总是有以下格式,你可以使用 substring_index 函数
链接:https://www.old_example1.com/12345678/myname 链接:https://www.old_example2.com/87654321/yourname
我用作单词来获取字符串的最新部分,包括替换的部分。我猜在你的字符串中只重复一次,否则这个答案会失败。.com/
.com/
SELECT SUBSTRING_INDEX(col,'.com/',-1) AS extracted
FROM test;
结果
extracted
12345678/myname
87654321/yourname
与上面相同的事情来获取数字并且不包括两次/
select concat('/',SUBSTRING_INDEX(SUBSTRING_INDEX(col,'.com/',-1),'/',1)) as value_to_replace
FROM test;
结果
value_to_replace
/12345678
/87654321
最后
select col,replace(col,concat('/',SUBSTRING_INDEX(SUBSTRING_INDEX(col,'.com/',-1),'/',1)),'') as new_col
from test;
结果
col new_col
https://www.old_example1.com/12345678/myname https://www.old_example1.com/myname
https://www.old_example2.com/87654321/yourname https://www.old_example2.com/yourname
评论
0赞
Ubuntubasic1864
11/14/2023
感谢 @Ergest Barsha(和 Shadow)指出字节和数字的区别。对于混乱,我深表歉意。事实上,子字符串索引出现在我的脑海中,但鉴于 url 位于文本帖子的正文中,我不确定。使用 concat,这看起来像是我问题的解决方案。谢谢一堆!
0赞
user1191247
11/14/2023
#2
您可以使用 REGEXP_REPLACE()。
下面是一个粗略的例子:
SET @string = 'Some text https://www.old_example1.com/12345678/myname blah blah blah https://www.old_example2.com/87654321/yourname some more blah';
SELECT
@string AS old_string,
REGEXP_REPLACE(
@string,
'https:\/\/www\.old_example([1|2])\.com(\/[0-9]{8}\/)',
'https://www.new_example$1.com/'
) AS new_string;
输出:
old_string | new_string |
---|---|
一些文字 https://www.old_example1.com/12345678/myname 等等等等 https://www.old_example2.com/87654321/yourname 再多一些等等 | 一些文字 https://www.new_example1.com/myname 等等等等 https://www.new_example2.com/yourname 再多一些等等 |
这是一个 db<>fiddle。
评论
0赞
Ubuntubasic1864
11/14/2023
REGEXP 看起来更整洁!
1赞
Ubuntubasic1864
11/14/2023
我最终用上面的通配符类型网址解决了我的难题。它帮助我更轻松地处理其他类似案件。谢谢一堆!
1赞
Ubuntubasic1864
11/15/2023
同样的请求是针对单个事件的,但我的服务器中也有类似的情况,所以我不得不手动应用修改后的情况。目前,对服务器问题的响应数量有限,但后来,如果它们经常这样,我必须添加即时转换的行。
评论
/