2012-05-10 39 views
81

Có thể sử dụng SQL trong bảng SQLite để thay thế một phần của chuỗi không?SQLite - thay thế một phần của chuỗi

Ví dụ: tôi có bảng trong đó một trong các trường giữ đường dẫn đến tệp. Có thể thay thế các phần của chuỗi sao cho, ví dụ:

c:\afolder\afilename.bmp 

trở thành

c:\anewfolder\afilename.bmp 

?

Trả lời

166

Bạn có thể sử dụng chức năng được xây dựng trong replace() để thực hiện chuỗi thay thế trong truy vấn.

chức năng chuỗi thao tác khác (và nhiều hơn nữa) đều được trình bày chi tiết trong SQLite core functions list

Sau đây nên chỉ cho bạn đi đúng hướng.

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

+4

Trong khi mệnh đề WHERE là không cần thiết, nó làm cho một chút yên tâm. Nếu không có WHERE, SqlLite sẽ cho bạn biết rằng mọi hàng trong bảng của bạn đã bị ảnh hưởng. Bằng cách sử dụng WHERE, bạn sẽ chỉ nhận được hàng tá hoặc nhiều hàng bạn mong đợi thay vì hàng nghìn khả năng. –

+2

@WestonWedding Tôi đã so sánh thời gian truy vấn có và không có mệnh đề WHERE. Nếu không có nơi truy vấn được lấy hai lần thời gian. –

20

@Andrew Câu trả lời là một phần đúng. Không cần sử dụng mệnh đề WHERE tại đây:

  1. Chỉ các trường có chứa C:\afolder sẽ bị ảnh hưởng, không có lý do để kiểm tra. Nó quá mức.
  2. 'C:\afolder\%' sẽ chỉ chọn các trường bắt đầu bằng chỉ C:\afolder\. Nếu bạn có đường dẫn bên trong chuỗi này thì sao?

Vì vậy, các truy vấn chính xác chỉ là:

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

Điều này có thay thế chuỗi trong mọi chuỗi trong cột "trường" không? – fifaltra

+0

@fifaltra có nó sẽ – resedasue

6

Và nếu bạn chỉ muốn làm điều đó trong một truy vấn mà không hậu quả lâu dài:

SELECT fieldA, replace(field, 'C:\afolder\', 'C:\anewfolder\'), fieldB FROM table; 
Các vấn đề liên quan