sql >> Database teknologi >  >> RDS >> Mysql

Indekseringskolonne med REPLACE-funktion i mySQL

Der er ikke noget der hedder beregnet kolonne i MySQL.

Hvis du vil formatere en eller anden værdi for at fremskynde indekssøgning, bliver du sandsynligvis nødt til at bruge en eller anden trigger. Faktisk besvarede jeg næsten det samme spørgsmål her til morgen:se https://stackoverflow.com /a/18047511/2363712 for et lignende eksempel.

I dit tilfælde ville det føre til sådan noget:

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 skal du bruge column_1_fmt at søge efter værdier/join på værdier med det påkrævede format.

Angående din særlige behov (fjernelse af bindestreger -- fra en slags serie-/referencenummer?). Måske skulle du vende problemet. Gem disse værdier som en kanonisk form (ingen bindestreg). Og tilføj nødvendige bindestreger ved SELECT tid.




  1. PHP array mysql hente hver post

  2. Første wpdb-indsættelse til mySql nye tabel virker ikke

  3. PHP/MYSQL Deltag i flere tabeller

  4. sp_add_schedule vs sp_add_jobschedule i SQL Server:Hvad er forskellen?