2012-05-10 15 views
81

SQLiteテーブルのSQLを文字列の一部に置き換えることは可能ですか?SQLite - 文字列の一部を置換する

たとえば、フィールドの1つがファイルへのパスを保持するテーブルがあります。 文字列の一部を置換することは可能ですか?

c:\afolder\afilename.bmp 

c:\anewfolder\afilename.bmp 

なり?

答えて

166

組み込みのreplace()関数を使用して、クエリで文字列置換を実行できます。

その他の文字列操作関数(およびそれ以上)正しい方向にあなたを指している必要があり、次のSQLite core functions list

に詳述されています。

UPDATE table SET field = replace(field, 'C:\afolder\', 'C:\anewfolder\') WHERE field LIKE 'C:\afolder\%';

+4

WHERE句は必要ありませんが、心の安らぎを少し与えます。 WHEREがなければ、SqlLiteはテーブルのすべての行が影響を受けたことを伝えます。 WHEREを使用することで、潜在的に何千もの代わりに期待していた十数行程度しか得られません。 –

+2

@WestonWedding WHERE句の有無にかかわらずクエリ時間を比較しました。クエリーが2回かかる。 –

20

@Andrew答えは部分的に正しいです。いいえ、ここWHERE句を使用する必要があります:C:\afolderを含む

  1. フィールドだけが、とにかくそれをチェックする理由に影響を与えません。それは過剰です。
  2. 'C:\afolder\%'は、C:\afolder\で始まるフィールドのみを選択します。このパスが文字列の中にあればどうなりますか?

だから、正しいクエリはちょうどです:

UPDATE table SET field = replace(field, 'C:\afolder\', 'C:\anewfolder\'); 
+0

これは、列 "フィールド"のすべての文字列の文字列を置き換えますか? – fifaltra

+0

@fifaltraはいそう – resedasue

6

そして、あなただけの結果を持続せず、クエリでそれをしたい場合:

SELECT fieldA, replace(field, 'C:\afolder\', 'C:\anewfolder\'), fieldB FROM table; 
関連する問題