提取某个字符之前的文本的 URL 部分

Extract URL part of Text before a certain character

提问人:ME_2023 提问时间:8/3/2023 最后编辑:Parking MasterME_2023 更新时间:8/15/2023 访问量:82

问:

我正在尝试从这些字符串中提取主机名,即第一个 % 符号之前的所有内容。

必须提取第一个 % 符号之前的 URL(粗体部分),我尝试使用 MID、SUBSTRING、CHARINDEX、LEFT 和 LEN,但都弄糊涂了。

这是代码(底部是我的尝试之一)。

DROP TABLE IF EXISTS #temp2;

CREATE TABLE #temp2 (url_link VARCHAR(2500));

INSERT INTO #temp2 (url_link)
VALUES
    ('az.account.box.com%2fsignup%2fcoll'),
    ('az.account.box.com%2fsignup%2fcollab%2f6kn7988x7i%3fbox_source%3dlegacy-external_collab_email%26amp%3bbox_action%3dclick_button'),
    ('app.box.com%2ffile%2f1105756887416%3fsb%3d%2factivity%2fcomments%2f515200504%26comment_id%3d515200504'),
    ('evelyn.sharefile.eu%2ff%2ffo292663-12a3-437f-8ec4-17a8f49ba4b6%3fa%3dc23e44cbd721d386'),
    ('app.box.com%2f'),
    ('app.box.com%2ffolder%2f0'),
    ('www.evernote.com%2fLogin.action');

SELECT
    url_link,
    CHARINDEX('%', url_link) AS [Pos%Char],
    LEFT(url_link, CHARINDEX('%', url_link) - 1) AS ExtractedHostname
FROM #temp2;
SQL 子字符串 提取 charindex

评论


答:

1赞 Aswin P.M 8/12/2023 #1

您使用 LEFT 函数提取 % 符号之前的子字符串,但您需要从长度中减去 1 以排除 % 符号本身。下面是 SQL 查询的更正版本:

SELECT
    url_link,
    CHARINDEX('%', url_link) AS [Pos%Char],
    LEFT(url_link, CHARINDEX('%', url_link) - 1) AS ExtractedHostname
FROM #temp2;