Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Indexspalte mit REPLACE-Funktion in mySQL

Es gibt keine berechnete Spalte in MySQL.

Wenn Sie einen Wert formatieren möchten, um die Indexsuche zu beschleunigen, müssen Sie wahrscheinlich einen Trigger verwenden. Tatsächlich habe ich heute Morgen fast dieselbe Frage beantwortet:siehe https://stackoverflow.com /a/18047511/2363712 für ein ähnliches Beispiel.

In Ihrem Fall würde das zu etwa folgendem Ergebnis führen:

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, '-', '');

Jetzt verwenden Sie column_1_fmt um nach Werten zu suchen/mit Werten zu verbinden, die das erforderliche Format haben.

Bezüglich Ihrer besondere Notwendigkeit (Entfernen von Bindestrichen -- von einer Art Serien-/Referenznummer?). Vielleicht solltest du das Problem umkehren. Speichern Sie diese Werte in kanonischer Form (kein Bindestrich). Und fügen Sie die erforderlichen Bindestriche bei SELECT hinzu Zeit.