Mysql
 sql >> база данни >  >> RDS >> Mysql

Индексираща колона с функция REPLACE в mySQL

Няма такова нещо като изчислена колона в MySQL.

Ако искате да форматирате някаква стойност, за да ускорите търсенето в индекс, вероятно ще трябва да използвате някакъв тригер. Всъщност тази сутрин отговорих на почти същия въпрос:вижте https://stackoverflow.com /a/18047511/2363712 за подобен пример.

Във вашия случай това би довело до нещо подобно:

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

Сега ще използвате column_1_fmt за търсене на стойности/съединяване на стойности с необходимия формат.

Относно вашата специална нужда (премахване на тирета -- от някакъв сериен/референтен номер?). Може би трябва да обърнете проблема. Съхранявайте тези стойности като канонична форма (без тире). И добавете задължителните тирета в SELECT време.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NULL обработка в MySQL След актуализация Тригер, който се задейства само при промяна на данни

  2. PreparedStatement никога няма да изтече, дори ако е изрично зададен

  3. MySQL индекси – какви са най-добрите практики?

  4. Само променливи могат да се предават чрез препратка - php

  5. Ефективно съхраняване на качени от потребителя изображения във файловата система