You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL从URL字段中提取域名?

用SQL直接提取URL中的域名

当然可以直接用SQL实现域名提取,不同数据库的函数语法略有差异,下面针对常用数据库给出具体方案:

MySQL/MariaDB

利用SUBSTRING_INDEX函数按指定分隔符截取字符串,针对你给出的示例(域名后直接跟/),可以直接取第一个/之前的内容:

SELECT id, SUBSTRING_INDEX(URL, '/', 1) AS domain
FROM your_table;

如果后续遇到带http://或https://前缀的URL,先剥离前缀再截取:

SELECT id, 
       SUBSTRING_INDEX(
           SUBSTRING_INDEX(URL, '://', -1), 
           '/', 1
       ) AS domain
FROM your_table;

PostgreSQL

可以用split_part拆分字符串,或结合正则处理复杂场景:

  1. 针对无前缀的URL:
SELECT id, split_part(URL, '/', 1) AS domain
FROM your_table;
  1. 兼容带http/https前缀的URL,用正则捕获域名部分:
SELECT id, substring(URL from '^(https?://)?([^/]+)', 2) AS domain
FROM your_table;

这段正则会忽略可选的http:///https://前缀,直接提取第一个/前的域名部分。

SQL Server

通过CHARINDEX定位分隔符位置,再用SUBSTRING截取内容:
针对无前缀的URL:

SELECT id, 
       SUBSTRING(URL, 1, CHARINDEX('/', URL) - 1) AS domain
FROM your_table
WHERE CHARINDEX('/', URL) > 0;

如果要处理带前缀的URL,先剥离前缀再截取:

SELECT id,
       SUBSTRING(
           CASE WHEN CHARINDEX('://', URL) > 0 THEN SUBSTRING(URL, CHARINDEX('://', URL) + 3, LEN(URL))
                ELSE URL END,
           1,
           CHARINDEX('/', CASE WHEN CHARINDEX('://', URL) > 0 THEN SUBSTRING(URL, CHARINDEX('://', URL) + 3, LEN(URL)) ELSE URL END) - 1
       ) AS domain
FROM your_table
WHERE CHARINDEX('/', URL) > 0;

补充说明

如果存在URL末尾没有/的情况(比如直接是nytimes.com),需要添加判断逻辑避免报错。例如MySQL中可调整为:

SELECT id, 
       CASE WHEN CHARINDEX('/', URL) > 0 THEN SUBSTRING_INDEX(URL, '/', 1) ELSE URL END AS domain
FROM your_table;

内容的提问来源于stack exchange,提问作者Prabin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 01:09:27