sql >> Database >  >> RDS >> Mysql

Een deel van een string in MySQL vervangen

Probleem:

U wilt een deel van een tekenreeks vervangen door een andere tekenreeks in MySQL.

Voorbeeld:

Onze database heeft een tabel met de naam motorbike_sale met gegevens in de id , name , en part_number kolommen.

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

We willen de onderdeelnummers van de motorfietsen wijzigen door alle koppeltekens te vervangen door schuine strepen.

Oplossing 1:

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

Deze zoekopdracht retourneert een lijst met motornamen en nieuwe onderdeelnummers. Let op de schuine strepen die de koppeltekens in de onderdeelnummers hebben vervangen:

naam new_ part_number
Harley Davidson x 1245/AC2/25
Honda CB750-x 012/GK8/A8
Suzuki Hayabusa X 798/25/28

Discussie:

Gebruik de functie MySQL REPLACE() om een ​​subtekenreeks (d.w.z. woorden, een teken, enz.) te vervangen door een andere subtekenreeks en de gewijzigde tekenreeks terug te geven. Deze functie heeft drie argumenten:

  • De tekenreeks die moet worden gewijzigd. (In ons voorbeeld is dit de kolom part_number .)
  • De subtekenreeks die moet worden vervangen (d.w.z. het teken '-').
  • De subtekenreeks die moet worden ingevoegd (d.w.z. het teken '/').

Merk op dat deze functie alle . vervangt voorkomens van de subtekenreeks in de gegeven tekenreeks of kolom. In ons voorbeeld heeft elk part_number bevat drie koppeltekens, die elk zijn vervangen door een schuine streep.

In het volgende voorbeeld vervangen we alle instanties van 'x' in motornamen door '10'.

Oplossing 2:

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

Deze query gebruikt een WHERE-component om records te filteren voor rijen met een id waarde van 2 of hoger.

Merk op dat de naam van de Honda-motorfiets is gewijzigd van 'x' in '10', maar de naam van de Suzuki-motorfiets niet. Waarom niet? Omdat REPLACE() hoofdlettergevoelig is. Daarom is 'x' niet hetzelfde als 'X'. In dit voorbeeld is 'x' vervangen door '10', maar is 'X' ongewijzigd gebleven.

Deze zoekopdracht toont de nieuwe naam van de Honda-motor en de oude naam van de Suzuki-motor.

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

  1. Hoe rond je een gemiddelde af op 2 decimalen in PostgreSQL?

  2. Kloon ORACLE_HOME

  3. Controleer of een object een primaire sleutel is met OBJECTPROPERTY() in SQL Server

  4. Een ODBC-gekoppelde server maken zonder een gegevensbron te configureren