Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Kolumna indeksująca z funkcją REPLACE w mySQL

Nie ma czegoś takiego jak kolumna obliczona w MySQL.

Jeśli chcesz sformatować jakąś wartość, aby przyspieszyć wyszukiwanie indeksu, prawdopodobnie będziesz musiał użyć wyzwalacza. Prawdę mówiąc, dziś rano odpowiedziałem na prawie to samo pytanie:patrz https://stackoverflow.com /a/18047511/2363712 dla podobnego przykładu.

W twoim przypadku doprowadziłoby to do czegoś takiego:

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

Teraz będziesz używać column_1_fmt do wyszukiwania wartości/łączenia wartości o wymaganym formacie.

Jeśli chodzi o swoje specjalna potrzeba (usuwając kreski -- z jakiegoś numeru seryjnego/referencyjnego?). Może powinieneś odwrócić problem. Zapisz te wartości w formie kanonicznej (bez myślnika). I dodaj wymagane myślniki w SELECT czas.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UPDATE with SELECT, czy zablokuje każdy wiersz lub wszystkie WYBRANE rekordy?

  2. Zastąp tabele MySQL za pomocą AWS Glue

  3. Używanie local.js do przechowywania hasła sails-mysql

  4. com.mysql.jdbc.MysqlDataTruncation:Obcinanie danych:Dane są za długie dla kolumny „nazwa_kolumny”

  5. Bind IS NULL lub NULL podczas korzystania z PHP PDO i MySql