For an example, i have following table:
| Id | Name | Color |
|---|---|---|
| 1 | FirstCar | White |
| 2 | SecondCar | Yellow |
| 3 | ThirdCar | Red |
| 4 | FourthCar | White |
| 5 | FifthCar | Green |
| 6 | SixthCar | Blue |
What i need to achieve: append string "_123" to field "Name" for all rows where "Name" is "SecondCar", "FourthCar" or "SixthCar" resulting following:
| Id | Name | Color |
|---|---|---|
| 1 | FirstCar | White |
| 2 | SecondCar_123 | Yellow |
| 3 | ThirdCar | Red |
| 4 | FourthCar_123 | White |
| 5 | FifthCar | Green |
| 6 | SixthCar_123 | Blue |
How can i do this?
CodePudding user response:
You can use CONCAT, which will apply _123 at our matching where name in ('SecondCar','FourthCar','SixthCar') condition .
UPDATE test set name = CONCAT(name,'_123')
WHERE name IN ('SecondCar','FourthCar','SixthCar');
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=fd790f9f30fecdb2f3dc22cb2d8ca0a5
Note. This will update existing data
CodePudding user response:
It's quite straightforward by using a CASE WHEN statement together with a CONCAT function:
SELECT
id,
CASE
WHEN name IN ("SecondCar", "FourthCar", "SixthCar")
THEN CONCAT(name, "_123")
ELSE name
END AS name,
color
FROM your_table;
