2

SQLITEのREGEXで大文字と小文字を区別しない検索を機能させることができません。構文はサポートされていますか?

SELECT * FROM table WHERE name REGEXP 'smith[s]*\i'

私は次の答えを期待します(データベースにこれらのエントリがあると仮定します):

Smith
Smiths
smith
smitH <---タイプミスではなく、データベースにあります

注-これはより大きな正規表現のごく一部であるため、LIKEは使用しません

4

3 に答える 3

1

REGEXPSQLite Managerに付属している関数は、JavaScriptで次のように実装されています。

var regExp = new RegExp(aValues.getString(0));
var strVal = new String(aValues.getString(1));

if (strVal.match(regExp)) return 1;
else return 0;

JavaScript RegExpオブジェクトで大文字と小文字を区別しない検索を行うには、パターン文字列自体にフラグを追加せずにi、2番目のパラメーターのフラグをRegExpコンストラクターに渡します。ただし、二項REGEXP演算子には3番目のフラグパラメーターがなく、コードはパターンからフラグを抽出しようとしないため、これらのフラグはこの実装ではサポートされていません。

于 2013-02-05T11:55:07.907 に答える
1

CLで説明されているように、この機能はSQLiteではサポートされていません。この問題の簡単な解決策は、lowerを使用してREGEXP式の左側を「小文字」にすることです。

SELECT * FROM table WHERE lower(name) REGEXP 'smith[s]*';

理想的ではありませんが、機能します。ただし、発音区別符号には注意してください。あなたのテキストがそれらを使用しているなら、私はより低いためにドキュメントを読むでしょう。

于 2018-08-01T21:03:59.673 に答える
0

https://www.sqlite.org/lang_expr.htmlから

「regexp」という名前のアプリケーション定義のSQL関数が実行時に追加されると、「X REGEXP Y」演算子は、「regexp(Y、X)」の呼び出しとして実装されます。

于 2019-11-12T14:19:22.200 に答える