sql >> Database >  >> RDS >> Mysql

Indexeringskolom met REPLACE-functie in mySQL

Er bestaat niet zoiets als berekende kolom in MySQL.

Als u een waarde wilt formatteren om het zoeken in indexen te versnellen, zult u waarschijnlijk een trigger moeten gebruiken. Ik heb trouwens vanmorgen bijna dezelfde vraag beantwoord:zie https://stackoverflow.com /a/18047511/2363712 voor een soortgelijk voorbeeld.

In jouw geval zou dat tot zoiets leiden:

CREATE TABLE `table_a`(`column_1` VARCHAR(255), ... ,
                       `column_1_fmt` VARCHAR(255),
                       INDEX(`column_1_fmt`));

CREATE TRIGGER ins_table_a BEFORE INSERT ON `table_a`
FOR EACH ROW
    SET NEW.`column_1_fmt` = REPLACE(NEW.column_1, '-', '');

CREATE TRIGGER upd_table_a BEFORE UPDATE ON `table_a`
FOR EACH ROW
    SET NEW.`column_1_fmt` = REPLACE(NEW.column_1, '-', '');

Nu gebruik je column_1_fmt om te zoeken naar waarden/meedoen aan waarden met het vereiste formaat.

Over uw speciale behoefte (verwijderen van streepjes -- van een soort serie-/referentienummer?). Misschien moet je het probleem omkeren. Sla die waarde op als canonieke vorm (geen streepje). En voeg vereiste streepjes toe bij SELECT tijd.




  1. pgadmin4:er kan geen verbinding worden gemaakt met de postgresql-toepassingsserver.

  2. Verbinding maken met MySQL die op Docker draait vanaf de hostcomputer

  3. RowGen v3 automatiseert het genereren van databasetestgegevens

  4. Leer basisgegevensanalyse met SQL-vensterfuncties