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
。