$like
句で、(sqlite3を使用して)ワイルドカード文字(%
、_
)をエスケープする方法を教えてください。
例えば、私は、任意の「things.description」に(だけでなく、単語の任意の文字に囲まれた「クール」)を文字列リテラル_cool_
を見つけ、それ以下1に匹敵するクエリを生成したいのですが
SELECT * FROM things WHERE description LIKE '\_cool\_' ESCAPE '\';
私はそれが次のようになります推測しているが、結果のクエリは私が望んでいるだろうものではありません。
Thing.findAll({
where: {
description: {
$like: ['?', '_cool_'],
// ... or ...
$like: '\\_cool\\_',
$escape: '\\',
}
}
});
// => Executing (default):
// SELECT `id`, `description`
// FROM `Things` AS `Thing`
// WHERE `Thing`.`description` LIKE '?','_cool_';
「LIKE」節はの一部となりますので、残念ながら、私は生の問合せにドロップすることはできませんより大きな動的クエリ。
アイデア?私の心に来る
一意のバックスラッシュをエスケープしている場合は、\\cool \ _としますか? – Xorifelse
@Xorifelse JavaScriptでは、文字列リテラル ''\\ _''は文字列 '" \ _ "'と等しくなります。 – maerics
これはちょうど後遺症であるかもしれません。https://github.com/sequelize/sequelize/issues/4317 – maerics