web-dev-qa-db-fra.com

SQLite - remplace une partie d'une chaîne

Est-il possible d'utiliser SQL dans une table SQLite pour remplacer une partie d'une chaîne?

Par exemple, j'ai une table où l'un des champs contient le chemin d'accès à un fichier. Est-il possible de remplacer des parties de la chaîne de telle sorte que, par exemple,.

c:\afolder\afilename.bmp

devient

c:\anewfolder\afilename.bmp

?

96
colin

Vous pouvez utiliser la fonction replace() intégrée pour effectuer un remplacement de chaîne dans une requête.

D'autres fonctions de manipulation de chaînes (et plus) sont détaillées dans la liste liste des fonctions principales de SQLite

Ce qui suit devrait vous orienter dans la bonne direction.

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

193
Andrew

@ Andrew la réponse est partiellement correcte. Pas besoin d'utiliser la clause WHERE ici:

  1. Seuls les champs contenant C:\afolder sera affecté de toute façon, aucune raison de le vérifier. C'est excessif.
  2. 'C:\afolder\%' choisira uniquement les champs commençant par C:\afolder\ seulement. Et si vous avez ce chemin dans string?

Donc, la requête correcte est juste:

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

Et si vous voulez simplement le faire dans une requête sans conséquences durables:

SELECT fieldA, replace(field, 'C:\afolder\', 'C:\anewfolder\'), fieldB FROM table;
8
bugmenot123