Проблем:
Искате да замените част от низ с друг низ в MySQL.
Пример:
Нашата база данни има таблица с име motorbike_sale
с данни в id
, name
и part_number
колони.
id | име | номер_част |
---|---|---|
1 | Харли Дейвидсън x | 1245-AC2-25 |
2 | Honda CB750-x | 012-GK8-A8 |
3 | Suzuki Hayabusa X | 798-25-28 |
Бихме искали да променим частните номера на мотоциклетите, като заменим всички знаци на тирета с наклонени черти.
Решение 1:
SELECT name, REPLACE( part_number, '-', '/' ) as new_part_number FROM motorbike_sale;
Тази заявка връща списък с имена на мотоциклети и нови номера на части. Обърнете внимание на наклонените черти, които са заменили тирета в номерата на частите:
name | нов_номер_част |
---|---|
Харли Дейвидсън x | 1245/AC2/25 |
Honda CB750-x | 012/GK8/A8 |
Suzuki Hayabusa X | 798/25/28 |
Дискусия:
Използвайте функцията MySQL REPLACE(), за да замените подниз (т.е. думи, знак и т.н.) с друг подниз и да върнете променения низ. Тази функция приема три аргумента:
- Низът за промяна. (В нашия пример това е колоната
part_number
.) - Поднизът за замяна (т.е. символът „-“).
- Поднизът за вмъкване (т.е. символът „/“).
Забележете, че тази функция замества всички поява на подниз в дадения низ или колона. В нашия пример всеки номер_част съдържа три знака за тире, всеки от които е заменен с наклонена черта.
В следващия пример ще заменим всички екземпляри на „x“ в имената на мотоциклети с „10“.
Решение 2:
SELECT id, REPLACE( name, 'x', '10' ) as new_name, part_number FROM motorbike_sale WHERE id>1;
Тази заявка използва клауза WHERE за филтриране на записи за редове с id стойност 2 или по-голяма.
Забележете, че името на мотоциклета Honda е променено от „x“ на „10“, но името на мотоциклета Suzuki не е променено. Защо не? Тъй като REPLACE() е чувствителен към малки и големи букви. Следователно „x“ не е същото като „X“. В този пример „x“ е заменен с „10“, но „X“ е непроменен.
Тази заявка показва новото име на мотоциклета Honda и старото име на мотоциклета Suzuki.
id | ново_име | номер_част |
---|---|---|
Honda CB750-10 | 012-GK8-A8 | |
Suzuki Hayabusa X | 798-25-28 |