0

可能是一个愚蠢的问题。

我需要在joinwhere 中大量使用它:

REPLACE(table_a.column_1, '-', '') = REPLACE(table_b.column_2, '-', '')

由于其他公司系统的位数据不一致

这是可能的还是任何其他数据库类型都可以使用 REPLACE 函数对列进行索引?例如:

ALTER TABLE `table_a` ADD INDEX ( REPLACE(`column_1`, '-', '') ) ;

数据库类型:MyISAM

4

1 回答 1

2

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

于 2013-08-05T08:11:12.810 回答