Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mySQL中带REPLACE函数的索引列_Mysql_Sql_Replace_Indexing_Myisam - Fatal编程技术网

mySQL中带REPLACE函数的索引列

mySQL中带REPLACE函数的索引列,mysql,sql,replace,indexing,myisam,Mysql,Sql,Replace,Indexing,Myisam,这可能是个愚蠢的问题 我需要在join和where中大量使用此功能: 由于位数据与其他公司的系统不一致 这是否可能,或者任何其他数据库类型都可以使用REPLACE函数对列进行索引?例如: ALTER TABLE `table_a` ADD INDEX ( REPLACE(`column_1`, '-', '') ) ; 数据库类型:MyISAM在MySQL中没有这样的东西 如果您想格式化一些值以加速索引搜索,您可能需要使用一些触发器。事实上,今天早上我回答了几乎相同的问题:请参阅类似的示例 在

这可能是个愚蠢的问题

我需要在join和where中大量使用此功能:

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

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

ALTER TABLE `table_a` ADD INDEX ( REPLACE(`column_1`, '-', '') ) ;
数据库类型:MyISAM

在MySQL中没有这样的东西

如果您想格式化一些值以加速索引搜索,您可能需要使用一些触发器。事实上,今天早上我回答了几乎相同的问题:请参阅类似的示例

在您的情况下,这将导致类似的情况:

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, '-', '');
现在,您将使用列_1_fmt搜索具有所需格式的值/连接值


关于您的特殊需要,请从某种序列号/参考号中删除破折号?。也许你应该扭转这个问题。将这些值存储为无破折号的标准形式。并在选择的时间添加所需的破折号。

为什么表a.column\u 1=表b.column\u 2在这里不起作用?我在某个地方读到,在变量上使用函数不使用索引,也不能在函数上创建索引,因为函数输出未确定,所以,我的答案是no@AshwinMukhija也许他的数据更多——来自其他公司db,然后他们有…@Sumit Gupta是的,确切地说,表格来自不同的公司,Sylvain建议的触发器将执行刻度,thx
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, '-', '');