2017-05-05 30 views
0

私はSQLの初心者です。現在、私は2つの列を持つSQLデータベースを使って作業しています。最初の列はidを指定します。 2番目の列は区切り記号 "@ d @"で区切られた人物のリストを指定します。したがって、列は "John @ d @ Jack @ d @ Prince"のように見えます。SQL行の列から特定の値を削除するにはどうすればよいですか?

このリストから特定の名前を削除する必要があります。リストからプリンスを削除しようとしているとします。削除操作の後、私の行をJohn @ d @ Jackのように見せたい。私はこの手順のためのソリューションを研究しており、私はカップルのリソースを見つけました。私はこのアプローチについて学んだ "UPDATE TABLE SET columnName = null WHERE YourCondition"その結果、列全体をnullに変更できますが、文字列を保持する方法がわからず、指定された値だけが削除されます。

+1

データ構造を修正しました。区切られた文字列に名前のリストを格納するのは、複数の値を格納するSQL的な方法ではありません。 SQLを学んでいるなら、SQLの観点から「正しい」ことをすることがさらに重要です。 –

+0

私は実際に自分の仕事に取り組んでいます。このように構成された非常に大きなデータベースです。したがって、私はあまり自由を持っていません – WOW

+0

その区切り文字を使用すると誰かが非常に悪い呼び出しをしました。私は私の時間にいくつかの狂った区切り文字を見たことがあるが、それは意図的に不快である。申し訳ありませんが、あなたは非常に悲しいことに壊れているプロジェクトに投げ込まれました。しかしこれは良い学習経験です。うまくいけばあなたのキャリアの中で誰かにこのようなものを与えることは決してありません。 – tadman

答えて

0

あなたは、二削除名の区切り文字を「削除」置き換えたい名前を「削除」置き換える機能を置き換え

update yourTable set yourField = replace(replace(yourField, 'Prince', ''), '@@' , '@') where yourCondition; 

ファーストを使用することができます。

0

私はあなたが探しているコマンドは

UPDATE TABLE set columnName = "[email protected]@Jack" WHERE YourCondition 

それとも、より一般的なアプローチをしたいんです間違っていないのですか?

+0

私は行に既に存在するものがわからないので、より一般的なアプローチが必要です。この列から削除したい値を保持する変数があります。したがって、私はvar変数= Princeを持っています。私は、新しい列がJohn @ d @ JackのようになるようにSQLクエリを実行したいと思います。しかし、私は既に列に何が存在するのかはわかりませんが、変数が列リストに存在することが保証されています – WOW

+0

その後、Fran Cerezoのアプローチは正しいです –

0

あなたは使ってこれを行うことができます。

update t 
    set list = trim(both '@' from replace(concat('@', list, '@'), concat('@', 'prince', '@'), '@')) 
    where concat('@', list, '@') like concat('%@', 'prince', '@%'); 

あなたは、変数または任意置き換えたいと'prince'を置き換えることができます。

関連する問題