2017-11-06 21 views
0

これは数百万回も投稿されていますが、この例では小刻みにカンマを削除する方法はわかりません。私は新しい列を作ってみたくないだけです。私はちょうど各列を調べ、コンマ区切りリストを解析し、その記述と共にこれらのコードを印刷したいと思います。末尾のカンマを削除する

たとえば、リストがGLUの場合は、VEGを入力して印刷します。 グルテンフリー、ベジタリアン。しかし、私は "グルテンフリー、ベジタリアン"を求めました。ここで

は、私が現在持っているものです。

SELECT *, 
    CASE WHEN(RE.FOODOPTIONS LIKE '%GLU%') THEN 'Gluten free,' 
        WHEN(RE.FOODOPTIONS LIKE '%ALL%') THEN 'Food Allergies,' 
        WHEN(RE.FOODOPTIONS LIKE '%VEG%') THEN 'Vegetarian,' 
        WHEN(RE.FOODOPTIONS LIKE '%OTHER%') THEN 'Other,' 
    END 
FROM RegExt AS RE 

感謝。

サンプルデータ:

FOODOPTIONS: GLU, ALL, VEG 
Results: Gluten free, Food Allergies, Vegetarian, 
Desired Results: Gluten free, Food Allergies, Vegetarian 

FOODOPTIONS: GLU 
Results: Gluten free, 
Desired Results: Gluten free 

FOODOPTIONS: GLU, VEG 
Results: Gluten free, Vegetarian, 
Desired Results: Gluten free, Vegetarian 

FOODOPTIONSの値がカンマで区切られたコードのリストです。それはそれらのリストを作ることができるが、最後にカンマを含む。

+0

DECLARE @FoodOptions varchar(100) = 'GLU, VEG' SELECT REPLACE(REPLACE(REPLACE (@FoodOptions, 'GLU', 'Gluten free'), 'ALL', 'Food Alergies'), 'VEG', 'Vegetarian') AS [ColumnName] 

は、出力を提供します。それを開始することが含まれている必要があります。 – ButtahNBred

+1

マッピングで '%GLU%'と '%VEG%'の両方を使用する予定ですか? –

+0

Bハウスの質問を拡大する - CASEステートメントは、「真の」条件を満たすと評価を停止します。したがってGLU、VEGのような文字列は、GLUがCASE文の最初のテスト条件であるため、 'Gluten Free'を返すだけです(Leonhard&Gordonによる)これを避け、GLU 、VEG '。 –

答えて

3

をあなたはあなたの文字列の長さを知っていないので、文字列と最後の文字

SELECT *, 
reverse(stuff(reverse(
    IIF(FOODOPTIONS LIKE '%GLU%', 'Gluten free,', '')+ 
    IIF(FOODOPTIONS LIKE '%ALL%', 'Food Allergies,', '')+ 
    IIF(FOODOPTIONS LIKE '%VEG%', 'Vegetarian,', '')+ 
    IIF(FOODOPTIONS LIKE '%OTHER%', 'Other,', '') 
), 1, 1, '')) 
FROM RegExt; 

のチョップを連結、IIFを使用することができ、文字列を逆にして最初の文字を切り取り、もう一度反転することができます。

2

私はこのstuff()を使用してください:

SELECT re.*, 
     STUFF((CASE WHEN RE.FOODOPTIONS LIKE '%GLU%' THEN ',Gluten free' ELSE '' END) + 
       CASE WHEN RE.FOODOPTIONS LIKE '%ALL%' THEN ',Food Allergies' ELSE '' END) + 
       CASE WHEN RE.FOODOPTIONS LIKE '%VEG%' THEN ',Vegetarian' ELSE '' END) + 
       CASE WHEN RE.FOODOPTIONS LIKE '%OTHER%' THEN ',Other' ELSE '' END 
      ), 2, LENGTH(RE.FOODOPTIONS), '' 
      ) 
FROM RegExt AS RE 
0

おそらくREPLACEを3回使用できますか?私は、SQL Serverを使用しています

ColumnName 
Gluten free, Vegetarian 
関連する問題