sql >> Databasteknik >  >> RDS >> Mysql

Hur man byter ut en del av en sträng i MySQL

Problem:

Du vill ersätta en del av en sträng med en annan sträng i MySQL.

Exempel:

Vår databas har en tabell som heter motorbike_sale med data i id , name och part_number kolumner.

id namn part_number
1 Harley Davidson x 1245-AC2-25
2 Honda CB750-x 012-GK8-A8
3 Suzuki Hayabusa X 798-25-28

Vi skulle vilja ändra motorcyklarnas artikelnummer genom att ersätta alla bindestreck med snedstreck.

Lösning 1:

SELECT name,
  REPLACE( part_number, '-', '/' ) as new_part_number
FROM motorbike_sale;

Denna fråga returnerar en lista med motorcykelnamn och nya artikelnummer. Lägg märke till de framåtgående snedstreck som har ersatt bindestreck i artikelnumren:

namn nytt_delnummer
Harley Davidson x 1245/AC2/25
Honda CB750-x 012/GK8/A8
Suzuki Hayabusa X 798/25/28

Diskussion:

Använd funktionen MySQL REPLACE() för att ersätta en delsträng (dvs. ord, ett tecken, etc.) med en annan delsträng och returnera den ändrade strängen. Denna funktion tar tre argument:

  • Strängen som ska ändras. (I vårt exempel är det kolumnen part_number .)
  • Den delsträng som ska ersättas (dvs tecknet "-").
  • Den delsträng som ska infogas (dvs tecknet '/').

Observera att den här funktionen ersätter alla förekomster av delsträngen i den givna strängen eller kolumnen. I vårt exempel, varje part_number innehåller tre bindestreck, som var och en har ersatts av ett snedstreck.

I nästa exempel kommer vi att ersätta alla instanser av 'x' i motorcykelnamn med '10'.

Lösning 2:

SELECT id,
  REPLACE( name, 'x', '10' ) as new_name,
  part_number
FROM motorbike_sale
WHERE id>1;

Den här frågan använder en WHERE-sats för att filtrera poster för rader med ett id värde på 2 eller högre.

Lägg märke till att Honda-motorcykelns namn ändrades från "x" till "10", men Suzuki-motorcykelns namn ändrades inte. Varför inte? Eftersom REPLACE() är skiftlägeskänsligt. Därför är 'x' inte detsamma som 'X'. I det här exemplet ersattes 'x' med '10', men 'X' var oförändrad.

Den här frågan visar det nya namnet på Honda-motorcykeln och det gamla namnet på Suzuki-motorcykeln.

id nytt_namn part_number
Honda CB750-10 012-GK8-A8
Suzuki Hayabusa X 798-25-28

  1. SQLiteDiskIOException med felkod 10:disk I/O-fel

  2. Formatera SQL i SQL Server Management Studio

  3. sql geografi till dbgeography?

  4. Det går inte att öppna databastest som begärts av inloggningen. Inloggningen misslyckades. Inloggning misslyckades för användaren 'xyz\ASPNET'