从URL中提取主机名

use*_*040 7 sql sql-server

我必须将网站名称修改为sql中的".com"或"co.in"

示例:假设我的站点地址为"http://stackoverflow.com/questions/ask?title=trim".我需要将结果作为"stackoverflow.com".

在某种情况下它可能像"www.google.co.in"然后我需要它是"google.co.in"

Dee*_*wal 11

请使用以下SQL代码提取域名:

DECLARE @WebUrl VARCHAR(35);
SET @WebUrl = 'http://stackoverflow.com/questions/ask?title=trim'

SELECT @WebUrl AS 'WebsiteURL',
       LEFT(SUBSTRING(@WebUrl, 
       (CASE WHEN CHARINDEX('//',@WebUrl)=0 
            THEN 5 
            ELSE  CHARINDEX('//',@WebUrl) + 2
            END), 35),
       (CASE 
       WHEN CHARINDEX('/', SUBSTRING(@WebUrl, CHARINDEX('//', @WebUrl) + 2, 35))=0 
       THEN LEN(@WebUrl) 
       else CHARINDEX('/', SUBSTRING(@WebUrl, CHARINDEX('//', @WebUrl) + 2, 35))- 1
       END)
       ) AS 'Domain';
Run Code Online (Sandbox Code Playgroud)


Fen*_*ton 6

我发现这里可能有很多变化,尤其是在针对推荐人表运行时。出于这个原因,我创建了一个SQL 脚本,它从一个 Web 地址获取主机名,该地址也涵盖了我发现的所有边缘情况。

DECLARE @WebAddress varchar(300) = 'https://www.stevefenton.co.uk/2015/09/select-the-host-name-from-a-string-in-sql/'
SELECT 
    /* Get just the host name from a URL */
    SUBSTRING(@WebAddress,
        /* Starting Position (After any '//') */
        (CASE WHEN CHARINDEX('//', @WebAddress)= 0 THEN 1 ELSE CHARINDEX('//', @WebAddress) + 2 END),
        /* Length (ending on first '/' or on a '?') */
        CASE
            WHEN CHARINDEX('/', @WebAddress, CHARINDEX('//', @WebAddress) + 2) > 0 THEN CHARINDEX('/', @WebAddress, CHARINDEX('//', @WebAddress) + 2) - (CASE WHEN CHARINDEX('//', @WebAddress)= 0 THEN 1 ELSE CHARINDEX('//', @WebAddress) + 2 END)
            WHEN CHARINDEX('?', @WebAddress, CHARINDEX('//', @WebAddress) + 2) > 0 THEN CHARINDEX('?', @WebAddress, CHARINDEX('//', @WebAddress) + 2) - (CASE WHEN CHARINDEX('//', @WebAddress)= 0 THEN 1 ELSE CHARINDEX('//', @WebAddress) + 2 END)
            ELSE LEN(@WebAddress)
        END
    ) AS 'HostName'
Run Code Online (Sandbox Code Playgroud)

这将处理...

  • 地址开始www.(即无方案)
  • 一个地址开始 //
  • 以 a 结尾的主机名 /
  • 以查询字符串结尾的主机名


sid*_*mor 5

这对我有用:

SELECT
    `url` ,
    LEFT(
        RIGHT(
            `url` ,
            length(`url`) -(position('//' IN `url`) + 1)
        ) ,
        position(
            '/' IN RIGHT(
                `url` ,
                length(`url`) -(position('//' IN `url`) + 1)
            )
        ) - 1
    ) AS domain
FROM
    `test`;
Run Code Online (Sandbox Code Playgroud)

从 URL 中提取域名