我有一列仅存储“ .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
您可以使用\.[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语句中使用此选项可根据需要进行分类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句