2016-05-24 9 views
1

私は以下の内容を含むいくつかのフィールドを持っています。私は私のクエリは、次のすべてのフィールドを満たしているが、以下の条件にしたい:条件が有効で文字列が抽出されたときのMySQLクエリ

  • まず、フィールド内dotvipoutまたはvipinがあるときだけ の間で文字列を抽出し、私はvipin3601.ym.msエキス の場合に意味します3601vipoutxxp1.ym.msの場合はxxp1となる。

  • 秒、残りの状態では、存在するものを拾うだけです。

    select provider from test group by provider; 
        +------------------+ 
        | provider | 
        +------------------+ 
        | 360-lay  | 
        | 382Com   | 
        | e-gus   | 
        | e-ggg-inbound | 
        | ttthts   | 
        | inefthyther  | 
        | jfc    | 
        | kefdfoo   | 
        | vipin3601.ym.ms | 
        | vipinstm.ym.ms | 
        | vipout382.ym.ms | 
        | vipoutils2.ym.ms | 
        | vipoutiot.ym.ms | 
        | vipoutxxp1.ym.ms | 
        | vipoutqlm.ym.ms | 
        | vipoutspm.ym.ms | 
        | unknown   | 
        +------------------+ 
        18 rows in set (0.00 sec) 
    

私のような何かを試してみました:

select left(provider,locate('.',provider)-1) from test group by provider; 

をしかし、これは以下のように返し、これは私が欲しいものではありません。私は望む結果を得るためにそれを変更する方法を知らない。

ありがとうございました。

答えて

2

ここでは複雑なケースステートメントを基本的に構築する必要があります。使用されて何の集約関数が存在しないので、ここで何もしていないようだと、私はあなたのGROUP BY句が含まれていませんでした

SELECT 
    CASE 
    /* vipin case */ 
    WHEN provider LIKE 'vipin%.%' 
     /* grab substring up to first '.' 
     * then get substring of that starting at 6th position 
     * to accomodate for 5 letters in 'vipin' 
     */ 
     THEN SUBSTRING(SUBSTRING_INDEX(provider, '.', 1), 6) 
    /* vipout case */ 
    WHEN provider LIKE 'vipout%.%' 
     /* grab substring up to first '.' 
     * then get substring of that starting at 6th position 
     * to accomodate for 6 letters in 'vipout' 
     */ 
     THEN SUBSTRING(SUBSTRING_INDEX(provider, '.', 1), 7) 
    /* all other cases */ 
    ELSE provider 
    END AS result 
FROM test 

注:それは、次のようになります。

+0

は、あなたの答えをありがとう! 'END AS result'とは何ですか?なぜ私たちはそれを書く必要がありますか? –

+0

@MaryamPashmi 'CASE'文を終了するには' END'が必要です。 'AS result'の部分は、結果のフィールドのエイリアスを提供するだけです。このエイリアシングは必要ありません。 –

+0

ok。どうもありがとうございます –

0

はこれを試してみてください:

SELECT CASE 
      WHEN provider LIKE 'vipin%.%' 
      THEN SUBSTRING_INDEX(SUBSTRING_INDEX(provider, '.', 1), 'vipin', -1) 
      WHEN provider LIKE 'vipout%.%' 
      THEN SUBSTRING_INDEX(SUBSTRING_INDEX(provider, '.', 1), 'vipout', -1) 
     END 
FROM test 
WhERE provider LIKE 'vipin%.%' OR provider LIKE 'vipout%.%' 
関連する問題