我的专栏只有" .edu .gov .org .com"存储在其中的域。同一个表中还有另一列存储CompanyID。我想知道根据域名对公司进行分类的最佳程序。即:教育.edu,政府为.gov等。
我的表格如下:
CompaniID Website
--------------------------------------------
1 www.comp1.gov/index.php
2 www.great-nice.comp.edu/#contact
我尝试了以下方法来处理TLD,但在某些情况下它失败了。一旦我计算了TLD比较,我就可以处理其余的查询。
段:
CASE
WHEN
REGEXP_Instr(Website, '.com') > 0
AND
NOT REGEXP_LIKE (SUBSTR (Website, REGEXP_Instr(Website, '.com') + 4,1), '^[a-z]|^[0-9]', 'i')
THEN 'For Profit'
ELSE 'Others'
END
答案 0 :(得分:2)
您可以使用\.[a-z]+(/|$)
模式在' /'之前提取字符。字符。
WITH x (y)
AS (SELECT 'www.comp1.gov/index.php' FROM DUAL UNION ALL
SELECT 'www.great-nice.comp.edu/#contact' FROM DUAL UNION ALL
SELECT 'www.comp1.edu' FROM DUAL
)
SELECT y,
RTRIM (REGEXP_SUBSTR (y, '\.[a-z]+(/|$)'), '/') tld,
REGEXP_SUBSTR (y, '\.([a-z]+)(/|$)', 1, 1, NULL, 1) tld2 --works only in 11gR2 and higher versions
FROM x;
| y | tld | tld2 |
|-----------------------------------|-----|------|
| www.comp1.gov/index.php |.gov | gov |
| www.great-nice.comp.edu/#contact |.edu | edu |
| www.comp1.edu |.edu | edu |
在CASE语句中使用此选项可根据您的需要进行分类。
答案 1 :(得分:0)
这会匹配www.comed.com
之类的内容。你可能想要
.com(?:[/]|$)