sql >> データベース >  >> RDS >> Mysql

URLからドメインを抽出するMySQLクエリ

    以前の回答のいくつかに加えて、データセットにもう少しハッカーを組み合わせる必要がありました。これは私にとってうまくいくものであり、ドメインとすべてのサブドメインを返します:

    SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(target_url, '/', 3), '://', -1), '/', 1), '?', 1) AS domain
    

    説明(重要なSQLが意味をなさない原因となることはめったにありません):

    SUBSTRING_INDEX(target_url, '/', 3) -URLにプロトコルがある場合は、すべてのパスを削除します
    SUBSTRING_INDEX(THAT, '://', -1) -THATからすべてのプロトコルを削除します
    SUBSTRING_INDEX(THAT, '/', 1) -THATからすべてのパスを削除します(プロトコルがなかった場合)
    SUBSTRING_INDEX(THAT, '?', 1) -クエリ文字列をその文字列から削除します(パスまたは末尾の/がない場合)

    テストケース:

    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(target_url, '/', 3), '://', -1), '/', 1), '?', 1) AS domain
    FROM ( 
        SELECT       'http://test.com' as target_url 
        UNION SELECT 'https://test.com' 
        UNION SELECT 'http://test.com/one' 
        UNION SELECT 'http://test.com/?huh' 
        UNION SELECT 'http://test.com?http://ouch.foo' 
        UNION SELECT 'test.com' 
        UNION SELECT 'test.com/one'
        UNION SELECT 'test.com/one/two'
        UNION SELECT 'test.com/one/two/three'
        UNION SELECT 'test.com/one/two/three?u=http://maaaaannn'
        UNION SELECT 'http://one.test.com'
        UNION SELECT 'one.test.com/one'
        UNION SELECT 'two.one.test.com/one' ) AS Test; 
    

    結果:

    'test.com'
    'test.com'
    'test.com'
    'test.com'
    'test.com'
    'test.com'
    'test.com'
    'test.com'
    'test.com'
    'test.com'
    'one.test.com'
    'one.test.com'
    'two.one.test.com'
    


    1. SQLで時間間の平均時間を取得する

    2. SQL Serverエラー110:INSERTステートメントには、VALUES句で指定された値よりも少ない列があります。

    3. テーブル追加列オラクルを変更する方法

    4. PHPでSQL変数をバインドする方法は?