Подстрока доменного имени из URL SQL - PullRequest
2 голосов
/ 07 апреля 2011

У меня есть набор данных:

www.google.com.sg
www.yahoo.com
marketwatch
bing.com
bbc.co.uk

Некоторые данные имеют www., некоторые нет. У некоторых есть .com / .com.sg / .com.ul, у некоторых нет.

Как мне извлечь только имя, например google, yahoo, marketwatch, bing, bbc с использованием SQL?

Ответы [ 3 ]

2 голосов
/ 07 апреля 2011

Используя синтаксис MS SQL Server CHARINDEX и SUBSTRING, вы можете сделать что-то вроде ...

(Сознательно чрезмерное разделение на каждый шаг очевиден.)

WITH
  url_start AS
(
  SELECT
    *,
    CASE WHEN LEFT(myURL, 4) = 'www.' THEN 4 ELSE 1 END AS d_start
  FROM
    myTable
)
,
  url_end
AS
(
  SELECT
    *,
    CASE WHEN
      CHARINDEX('.', myURL, d_start) = 0
    THEN
      LEN(myURL) + 1
    ELSE
      CHARINDEX('.', myURL, d_start)
    END as d_end
  FROM
    url_start
)
SELECT
  *,
  SUBSTRING(myURL, d_start, d_end - d_start) AS domain
FROM
  url_end
1 голос
/ 07 апреля 2011

Вы можете использовать функцию Заменить в SQL, чтобы удалить www., если она не существует, она оставит строку такой, какая она есть.

Select Replace(URLColumn, 'www.','') as [CleanURLColumn]
From YourTable

EDIT

Извините, я пропустил окончание - на основе предоставленных вами образцов данных будет извлечено имя:

Select  Case
        When CharIndex('.', Replace(URL, 'www.','')) > 0 then
           Left(Replace(URL, 'www.',''), CharIndex('.',Replace(URL, 'www.',''))-1)
        Else
           Replace(URL, 'www.','')
        End as [CleanURL]

From dbo.YourTable
0 голосов
/ 07 апреля 2011
;with cte as
(
  select replace(URL, 'www.', '')+'.' as url
  from myTable
)
select
  left(url, charindex('.', url)-1)
from cte
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...