関数が必要です:
f(fqdn,suffix) -> basedomain
これらの入力と出力の例:
f('foobar.quux.somedomain.com','com') -> 'somedomain.com'
f('somedomain.com','com') -> 'somedomain.com'
f('foobar.quux.somedomain.com.br','com.br') -> 'somedomain.com.br'
f('somedomain.com.br','com.br') -> 'somedomain.com.br'
平易な英語で、セグメントがある場合はsuffix
、n
最後のn+1
セグメントを取ります。一部の FQDN には複数のサフィックス要素があるという事実を考慮して、FQDN のベース ドメインを見つけます。
一致させる必要があるサフィックスはhereです。私はすでにSQLデータベースにそれらを持っています。
これは C# で記述できます。最もエレガントではないかもしれませんが、うまくいくでしょう。残念ながら、データに最も近い T-SQL、またはこのデータを消費するユーティリティの残りの部分が配置される Powershell のいずれかでこの関数を使用したいと考えています。C# で実行し、アセンブリにコンパイルしてから、T-SQL または Powershell からアクセスしても問題ないと思います...それが最速の実行である場合。純粋な T-SQL または単純な Powershell に合理的に賢い代替手段がある場合は、それを希望します。
編集: 明示的に言及するのを忘れていたことの 1 つ (ただし、上記のリンクでサフィックス リストを確認すると明らかです) は、一致する最も長いサフィックスを選択する必要があるということです。「br」と「com.br」の両方が接尾辞リストに表示されます (uk、pt などでも同様のことが起こります)。そのため、SQL はウィンドウ関数を使用して、一致する最長のサフィックスが見つかるようにする必要があります。
これが、SQLを実行していたときの到達距離です。substring
私はすべての/reverse
関数で迷っていました。
SELECT Domain, suffix
FROM (
SELECT SD.Domain, SL.suffix,
RN=ROW_NUMBER() OVER (
PARTITION BY sd.Domain ORDER BY LEN(SL.suffix) DESC)
FROM SiteDomains SD
INNER JOIN suffixlist SL ON SD.Domain LIKE '%.'+SL.suffix
) AS X
WHERE RN=1
これは、正しい接尾辞を見つけるのに問題なく機能します。ただ、その性能が少し気になります。