2017-12-18 11 views
0

私は1つのテーブルのようなデータを持ってい:私は別のテーブルに上記のデータを挿入したい近くに無効な構文「ケース」

ID | Fill 
    --------------- 
    1 | @@@@ 
    2 | @@@@Y 
    3 | @@@@Y245 

となるように結果表を期待:

ID | Fill 
    ---------------- 
    1 |  (Space) 
    2 |  Y 
    3 |  Y245 

をつまり、@@@@が見つかると、それはスペースで置き換えられるはずです(4 @と同じように4スペースの文字)

ここで私はこれをやろうとしています:

insert into table1 
    (
    id 

    ,case 
     when contains(substring([fill],1,4),'@@@@') then ' '+substring([fill],5,100) 
     else [fill] 
     end 
    ) 
    select 
    id 
    ,convert(char(100),[col1]+[col2]+[col3]+[col4]) 
     from 
    table2 

ただし、 "case"の近くに構文エラーがあります。私は間違って何をしていますか?どのように私は望ましい結果を達成することができますか?

+0

を達成するために置き換える '、あなたが'たときに[塗りつぶし] '「@@@@%」のようなを探しているようですか? –

+1

また、構文が間違っています。 'insert into table into(挿入する列のリスト) 'を選択すると、「列のリスト」の中にcase式が置かれています。これは間違っています。そうです、構文が正しくありません。 –

+0

'patindex'を見てください。また、先頭の文字を取り除く/トリムすることに関する一般的な質問も探してください。 – shawnt00

答えて

2

だけ@が発生した場合、それは置き換えられますreplace()

insert into destination_table (col1) 
select replace(col1, '@', ' ') from source_table 

を使用しています。そうでない場合、元の文字列が使用されます。

+0

スペースを挿入できる@の正確な位置を知りたいので、私が使用している部分文字列です。賢明なように、私は別の位置でもほとんど異なるキャラクターを持っていません。私はいくつかの文字を他の文字と置き換えたい(位置に基づいて) – AskMe

0

ケースはINSERTステートメントのフィールドリスト部分にあり、したがって無効です。 CONTAINS`は、フリーテキスト検索演算子である あなただけの単純なを使用することができ、この

INSERT INTO table1 (id, fill) 
select id, replace(fill, '@@@@', ' ') from table2