9

SQLでWebサイト名を「.com」または「co.in」にトリミングする必要があります

例: サイトアドレスが「http://stackoverflow.com/questions/ask?title=trim」であると仮定します。「stackoverflow.com」として結果を取得する必要があります。

「www.google.co.in」のようなシナリオがある場合は、「google.co.in」にする必要があります

4

8 に答える 8

14

以下の SQL コードを使用してドメイン名を抽出してください。

DECLARE @WebUrl VARCHAR(35);
SET @WebUrl = 'http://stackoverflow.com/questions/ask?title=trim'

SELECT @WebUrl AS 'WebsiteURL',
       LEFT(SUBSTRING(@WebUrl, 
       (CASE WHEN CHARINDEX('//',@WebUrl)=0 
            THEN 5 
            ELSE  CHARINDEX('//',@WebUrl) + 2
            END), 35),
       (CASE 
       WHEN CHARINDEX('/', SUBSTRING(@WebUrl, CHARINDEX('//', @WebUrl) + 2, 35))=0 
       THEN LEN(@WebUrl) 
       else CHARINDEX('/', SUBSTRING(@WebUrl, CHARINDEX('//', @WebUrl) + 2, 35))- 1
       END)
       ) AS 'Domain';
于 2012-11-07T09:24:02.023 に答える
7

ここでは、特にリファラーのテーブルに対して実行する場合に、多くのバリエーションが存在する可能性があることがわかりました。このため、Web アドレスからホスト名を取得する SQL スクリプトを作成しました。これは、私が見つけたすべてのエッジ ケースにも対応しています。

DECLARE @WebAddress varchar(300) = 'https://www.stevefenton.co.uk/2015/09/select-the-host-name-from-a-string-in-sql/'
SELECT 
    /* Get just the host name from a URL */
    SUBSTRING(@WebAddress,
        /* Starting Position (After any '//') */
        (CASE WHEN CHARINDEX('//', @WebAddress)= 0 THEN 1 ELSE CHARINDEX('//', @WebAddress) + 2 END),
        /* Length (ending on first '/' or on a '?') */
        CASE
            WHEN CHARINDEX('/', @WebAddress, CHARINDEX('//', @WebAddress) + 2) > 0 THEN CHARINDEX('/', @WebAddress, CHARINDEX('//', @WebAddress) + 2) - (CASE WHEN CHARINDEX('//', @WebAddress)= 0 THEN 1 ELSE CHARINDEX('//', @WebAddress) + 2 END)
            WHEN CHARINDEX('?', @WebAddress, CHARINDEX('//', @WebAddress) + 2) > 0 THEN CHARINDEX('?', @WebAddress, CHARINDEX('//', @WebAddress) + 2) - (CASE WHEN CHARINDEX('//', @WebAddress)= 0 THEN 1 ELSE CHARINDEX('//', @WebAddress) + 2 END)
            ELSE LEN(@WebAddress)
        END
    ) AS 'HostName'

これは処理します...

  • アドレスの開始www.(つまり、スキームなし)
  • アドレスの開始//
  • で終わるホスト名/
  • クエリ文字列で終わるホスト名
于 2015-09-14T07:54:33.627 に答える
1

SQLCLR 関数を使用し、System.Uriクラスを活用します。

于 2012-11-07T09:25:32.260 に答える
1

これが古いスレッドであることは知っていますが、最近これをやろうとしていたのですが、ここでの答えは、で始まる文字列http/sまたは新しい gTLD をカバーしていませんでした。そこで、CTE式を使用して、可能な限り読みやすく理解しやすいものにしようと思いついたのは次のとおりです。

うまくいけば、将来このスレッドに出くわした人に役立つでしょう!

DECLARE @Var NVARCHAR(1000)
SET @Var='http://stackoverflow.com/questions/ask?title=trim';

WITH cteWithoutWWW (Domain)
as
(
    SELECT
      case when PATINDEX('%www.%', @Var) > 0 then
            SUBSTRING(@Var, PATINDEX('%www.%', @Var) + 4, LEN(@Var) - PATINDEX('%www.%', @Var))
      else
            @Var
      end
),
cteWithoutHTTP (Domain)
as
(
      select
      case when PATINDEX('http://%', Domain) > 0 then
            SUBSTRING(Domain, PATINDEX('http://%', Domain) + 7, LEN(Domain) - PATINDEX('http://%', Domain))
      else
            Domain
      end
      from cteWithoutWWW
),
cteWithoutSlash (Domain)
as
(
      select
      case when CHARINDEX('/', Domain) > 0 then
            SUBSTRING(Domain, 0, CHARINDEX('/', Domain))
      else
            Domain
      end
      from cteWithoutHTTP
)
select Domain from cteWithoutSlash 
于 2017-04-18T16:32:33.357 に答える
0

これはどう:

DECLARE @Var NVARCHAR(1000)
SET @Var='http://stackoverflow.com/questions/ask?title=trim'

SET @Var=REPLACE(@Var,'http://','')
IF(LEFT(@Var,4)='www.')
    SET @Var=RIGHT(@Var, len(@Var)-4)

IF(PATINDEX('%.com%', @Var)<>0)
    SELECT SUBSTRING(@Var,0, PATINDEX('%.com%', @Var)+4)
ELSE IF (PATINDEX('%.co.%', @Var)<>0)
    SELECT SUBSTRING(@Var,0, PATINDEX('%.co.%', @Var)+6)
于 2012-11-07T10:06:00.717 に答える
-1

これがコードです。部分文字列を使用してください。.comと.co.inの両方で機能します

DECLARE @string VARCHAR(50),  @ind int = 0
SET @string = 'http://stackoverflow.co.in/questions/ask?title=trim'


SET @ind=  charindex('.com', @string)  

IF @ind = 0
BEGIN
    SET @ind=  charindex('.co.in', @string)  
    Print SUBSTRING ( @string ,0 , @ind+6 )
END
ELSE
BEGIN
    Print SUBSTRING ( @string ,0 , @ind +4)
END
于 2012-11-07T09:37:54.183 に答える