我有一个表,可以说数据。
数据表包含id和url。
id url
1 https://gourmet.com/detail/12345/?where=tokyo
2 https://dental-clinic.com/source/detail/4123/?site_code=tokyo
3 https://dental-hospital.com/detail/index/sdf2344/?where=tokyo
4 https://gourmet.com/detail/234ff/?where=tokyo
5 https://dental-clinic.com/source/detail/4123ss/?site_code=tokyo
6 https://gourmet.com/detail/43543//?where=tokyo
我只想在选择过程中获取URL内的ID。就像我已经有了regex模式一样,但是我想知道如何在“ SELECT” mysql部分上使用它。
我有3个网址格式。
注意:网址中的ID是字母数字。
注意:某些网址是这样的。远端有双斜杠:
https://gourmet.com/detail/12345//?where=tokyo
所需的输出:
id api_id url
1 12345 https://gourmet.com/detail/12345/?where=tokyo
2 4123 https://dental-clinic.com/source/detail/4123/?site_code=tokyo
3 sdf2344 https://dental-hospital.com/detail/index/sdf2344/?where=tokyo
4 234ff https://gourmet.com/detail/234ff/?where=tokyo
5 4123ss https://dental-clinic.com/source/detail/4123ss/?site_code=tokyo
6 43543 https://gourmet.com/detail/43543//?where=tokyo
select sql应该看起来像这样:
SELECT (regex?) as api_id, id, url FROM data;
答案 0 :(得分:1)
我们可以使用两个链式调用GET /api/v4/projects/my_namespace%2Fmy_app
来处理此问题:
SUBSTRING_INDEX
使用SELECT
id,
SUBSTRING_INDEX(SUBSTRING_INDEX(url, '/', -2), '/', 1) AS api_id,
url
FROM yourTable;
首次调用SUBSTRING_INDEX
会从URL中删除所有内容,但最后一个路径元素和查询字符串除外。使用-2
进行的第二次调用将删除查询字符串,并为我们保留API ID。
根据下面的评论,如果有时路径分隔符显示为两个正斜杠,则只需将所有1
替换为一个//
正斜杠:
/
答案 1 :(得分:0)
强力解决方案应类似于:
现在,检查生成的子字符串是否包含在主字符串(url)中
4.1。如果您在string(url)内找到了子字符串,只需放在桌子上
4.2。否则,反转子字符串并放在桌子上
解决方案:
CREATE FUNCTION MyFunction (@Url VarChar(1000))
RETURNS @TableName TABLE (Id Int Identity(1,1), apt_id VarChar(30), urlName
VarChar(1000))
AS
BEGIN;
Set @url = Reverse(@Url)
Declare @i as Int = 1
Declare @j as Int = 0
While(Ascii(Substring(@Url, @i, 1)) >=48)
Begin
Set @i = @i +1
End
Set @j = @i + 1
While(Ascii(Substring(@url, @j, 1)) != 47)
Begin
Set @j = @j +1
End
If((CharIndex(SubString(@Url, @i+1, @j-@i-1), @Url) = 1))
Begin
Insert @TableName
Select Substring(@Url, @i+1, @j-@i-1), @Url
End
Else
Begin
Insert @TableName
Select Reverse(Substring(@Url, @i+1, @j-@i-1), @Url)
End
RETURN;
END;