提供された文字列から記号を取り除くMySQL関数を定義します。その後
DELIMITER //
CREATE FUNCTION STRIP_SYMBOLS(input VARCHAR(255))
RETURNS VARCHAR(255) DETERMINISTIC NO SQL
BEGIN
DECLARE output VARCHAR(255) DEFAULT '';
DECLARE c CHAR(1);
DECLARE i INT DEFAULT 1;
WHILE i < LENGTH(input) DO
SET c = SUBSTRING(input, i, 1);
IF c REGEXP '[a-zA-Z0-9]' THEN
SET output = CONCAT(output, c);
END IF;
SET i = i + 1;
END WHILE;
RETURN output;
END//
DELIMITER ;
剥奪シンボルとpartnumber
がXP1
を含んでいる場合、あなたのテーブルからレコードを選択します。
SELECT * FROM products WHERE STRIP_SYMBOLS(partnumber) LIKE '%XP1%';
-- Returns: XP-12345, XP1-5555, VX-AP-XP-1000
あなたのテーブルが大きい場合、これは痛いほど遅くなることがあります。この場合、生成された列(MySQL 5.7.6以上を持っている場合)を調べるか、またはテーブルの列を更新してシンボルを削除したpartnumber
で更新するトリガー(以前のバージョンの場合)を作成します。
結果プロパティは表示されません。それは、XP1が設立された場合の結果のみを表示します。 XPと1の間に特殊文字があれば無視して結果を表示する必要があります。特殊文字のみ無視する必要がありますが、それぞれの文字を別々の検索タームとして分割する必要はありません。 "XP"を結合する必要があります – user3264863
文字のエスケープ時に引用符で囲まれている限り、リンク先は更新されました – Jorden
私はそれに ' - '記号が含まれていることを知っていますが、クエリで@、_、および\ characterを無視しなければならないとしたらどうすればいいですか? – user3264863