sql >> Databasteknik >  >> RDS >> Mysql

Indexeringskolumn med REPLACE-funktion i mySQL

Det finns inget sådant som datorkolumn i MySQL.

Om du vill formatera något värde för att påskynda indexsökningen måste du förmodligen använda någon trigger. Faktum är att jag svarade på nästan samma fråga i morse:se https://stackoverflow.com /a/18047511/2363712 för ett liknande exempel.

I ditt fall skulle det leda till något liknande:

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 kommer du att använda column_1_fmt för att söka efter värden/sammanfoga på värden som har önskat format.

Angående din särskilda behov (ta bort streck -- från något slags serie-/referensnummer?). Du kanske borde vända på problemet. Lagra dessa värden som kanonisk form (ingen bindestreck). Och lägg till obligatoriska streck vid SELECT tid.




  1. Fråga för att hitta genomsökningar av hela tabellen i Oracle

  2. Ansluta till Docker MySQL-behållare från localhost?

  3. välj flera rader olika värde från samma tabell

  4. visar en bild lagrad i en mysql blob