Мне нужно извлечь доменное имя для списка URL, используя PostgreSQL. В первой версии я пытался использовать REGEXP_REPLACE для замены нежелательных символов, таких как www., Biz., Sports. И т. Д., Чтобы получить доменное имя.
SELECT REGEXP_REPLACE(url, ^((www|www2|www3|static1|biz|health|travel|property|edu|world|newmedia|digital|ent|staging|cpelection|dev|m-staging|m|maa|cdnnews|testing|cdnpuc|shipping|sports|life|static01|cdn|dev1|ad|backends|avm|displayvideo|tand|static03|subscriptionv3|mdev|beta)\.)?', '') AS "Domain",
COUNT(DISTINCT(user)) AS "Unique Users"
FROM db
GROUP BY 1
ORDER BY 2 DESC;
Это кажется неблагоприятным, так как запрос должен постоянно обновляться для списка нежелательных слов.
Я попытался https://stackoverflow.com/a/21174423/10174021 извлечь из конца строки, используя PostgreSQL REGEXP_SUBSTR, но я получаю пустые строки взамен. Есть ли более лучший способ сделать это?
Образец набора данных, который можно попробовать:
CREATE TABLE sample (
url VARCHAR(100) NOT NULL);
INSERT INTO sample url)
VALUES
("sample.co.uk"),
("www.sample.co.uk"),
("www3.sample.co.uk"),
("biz.sample.co.uk"),
("digital.testing.sam.co"),
("sam.co"),
("m.sam.co");
Желаемый вывод
+------------------------+--------------+
| url | domain |
+------------------------+--------------+
| sample.co.uk | sample.co.uk |
| www.sample.co.uk | sample.co.uk |
| www3.sample.co.uk | sample.co.uk |
| biz.sample.co.uk | sample.co.uk |
| digital.testing.sam.co | sam.co |
| sam.co | sam.co |
| m.sam.co | sam.co |
+------------------------+--------------+