Vấn đề:
Bạn muốn thay thế một phần của chuỗi bằng một chuỗi khác trong MySQL.
Ví dụ:
Cơ sở dữ liệu của chúng tôi có một bảng có tên motorbike_sale
với dữ liệu trong id
, name
và part_number
cột.
id | tên | part_number |
---|---|---|
1 | Harley Davidson x | 1245-AC2-25 |
2 | Honda CB750-x | 012-GK8-A8 |
3 | Suzuki Hayabusa X | 798-25-28 |
Chúng tôi muốn thay đổi số bộ phận của xe máy bằng cách thay thế tất cả các ký tự gạch nối bằng dấu gạch chéo về phía trước.
Giải pháp 1:
SELECT name, REPLACE( part_number, '-', '/' ) as new_part_number FROM motorbike_sale;
Truy vấn này trả về danh sách tên xe máy và số bộ phận mới. Lưu ý các dấu gạch chéo về phía trước đã thay thế các dấu gạch ngang trong các số bộ phận:
name | new_ part_number |
---|---|
Harley Davidson x | 1245 / AC2 / 25 |
Honda CB750-x | 012 / GK8 / A8 |
Suzuki Hayabusa X | 798/25/28 |
Thảo luận:
Sử dụng hàm REPLACE () của MySQL để thay thế một chuỗi con (tức là các từ, một ký tự, v.v.) bằng một chuỗi con khác và trả về chuỗi đã thay đổi. Hàm này có ba đối số:
- Chuỗi thay đổi. (Trong ví dụ của chúng tôi, đó là cột
part_number
.) - Chuỗi con cần thay thế (tức là ký tự ‘-’).
- Chuỗi con cần chèn (tức là ký tự ‘/’).
Lưu ý rằng chức năng này thay thế cho tất cả lần xuất hiện của chuỗi con trong chuỗi hoặc cột đã cho. Trong ví dụ của chúng tôi, mỗi part_number chứa ba ký tự gạch nối, mỗi ký tự được thay thế bằng dấu gạch chéo.
Trong ví dụ tiếp theo, chúng tôi sẽ thay thế tất cả các trường hợp của 'x' trong tên xe máy bằng '10'.
Giải pháp 2:
SELECT id, REPLACE( name, 'x', '10' ) as new_name, part_number FROM motorbike_sale WHERE id>1;
Truy vấn này sử dụng mệnh đề WHERE để lọc bản ghi cho các hàng có id giá trị từ 2 trở lên.
Lưu ý rằng tên của xe máy Honda đã được đổi từ 'x' thành '10', nhưng tên của xe máy Suzuki không được thay đổi. Tại sao không? Vì REPLACE () phân biệt chữ hoa chữ thường. Do đó, ‘x’ không giống với ‘X’. Trong ví dụ này,‘ x ’đã được thay thế bằng‘ 10 ’, nhưng‘ X ’không thay đổi.
Truy vấn này hiển thị tên mới của xe máy Honda và tên cũ của xe máy Suzuki.
id | new_name | part_number |
---|---|---|
Honda CB750-10 | 012-GK8-A8 | |
Suzuki Hayabusa X | 798-25-28 |