SQLite - заменить часть строки

75

Возможно ли использовать SQL в таблице SQLite для замены части строки?

Например, у меня есть таблица, в которой одно из полей содержит путь к файлу. Можно ли заменить части строки так, чтобы, например,

c:\afolder\afilename.bmp

становится

c:\anewfolder\afilename.bmp

?

Теги:

3 ответа

158
Лучший ответ

Вы можете использовать встроенную функцию replace() для выполнения замены строки в запросе.

Другие функции манипуляции строками (и более) подробно описаны в списке основных функций SQLite

Следующее должно указывать на вас в правильном направлении.

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

  • 6
    Хотя предложение WHERE не является необходимым, оно дает немного душевного спокойствия. Без ГДЕ SqlLite скажет вам, что каждая строка в вашей таблице была затронута. Используя WHERE, вы получите только дюжину ожидаемых строк, а не тысячи.
  • 2
    @WestonWedding Я сравнил время запроса с предложением WHERE и без него. Без того, где запрос занимает два раза.
Показать ещё 2 комментария
17
Ответ

@Andrew является частично правильным. Не нужно использовать предложение WHERE здесь:

  • В любом случае будут затронуты только поля, содержащие C:\afolder, и никаких оснований для его проверки. Это чрезмерно.
  • 'C:\afolder\%' будет выбирать только поля, начинающиеся только с C:\afolder\. Что делать, если у вас есть этот путь внутри строки?

Итак, правильный запрос:

UPDATE table SET field = replace( field, 'C:\afolder\', 'C:\anewfolder\');
  • 0
    Будет ли это заменить строку в каждой строке в столбце "поле"?
  • 0
    @fifaltra да, это будет
Показать ещё 1 комментарий
5

И если вы просто хотите сделать это в запросе без длительных последствий:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню