gpt4 book ai didi

mysql - 如何在 substring_index 中传递多个分隔符

转载 作者:行者123 更新时间:2023-11-29 16:06:50 28 4
gpt4 key购买 nike

我想查询 https://或 http://及其后面的第一个分隔符之间的字符串。例如,如果该字段包含:

https://google.com/en/
https://www.yahoo.com?en/

我想要得到:

google.com
www.yahoo.com

我的初始查询将捕获 / 仅包含两个 substring_index,如下所示:

SELECT substring_index(substring_index(mycol,'/',3),'://',-1)
FROM mytable;

现在我发现 URL 可能包含多个分隔符。我希望我的语句能够捕获多种分隔符的可能性(每个分隔符都是一个单独的字符):

:/?#[]@!$&'()*+,;=

如何在我的声明中执行此操作?我试过this solution但最终结果由于语法错误而无法执行命令,而我确信我遵循了解决方案。任何人都可以帮助我正确构建查询以捕获上面列出的所有分隔符字符吗?

我在 Ubuntu 18.04 上使用 MySQL workbecnh 6.3。

编辑:

对第一个 URL 示例进行了一些更正。

最佳答案

首先,请注意 https://www.yahoo.com?en/ 看起来不太可能是一个 URL,因为它的查询字符串中包含一个路径分隔符。无论如何,如果您使用 MySQL 8+,请考虑使用其正则表达式功能。 REGEXP_REPLACE 函数在这里会很有帮助,使用以下模式:

https?://([A-Za-z_0-9.-]+).*

示例查询:

WITH yourTable AS (
SELECT 'https://www.yahoo.com?en/' AS url UNION ALL
SELECT 'no match'
)

SELECT
REGEXP_REPLACE(url, 'https?://([A-Za-z_0-9.-]+).*', '$1') AS url
FROM yourTable
WHERE url REGEXP 'https?://[^/]+';

Demo

术语$1指的是正则表达式模式中的第一个捕获组。显式捕获组由括号中的数量表示。在本例中,这是捕获组(下面突出显示):

https?://([A-Za-z_0-9.-]+).*
^^^^^^^^^^^^^^^

即捕获组是URL路径的第一部分,包括域、子域等。

关于mysql - 如何在 substring_index 中传递多个分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55666161/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com