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 に答える