3

その列のように構築された、Android 上の既存の sqlite データベースで次のことを行いたい: id --- rule --- path --- someotherdata

たとえば、ルールにファイル名の一部が含まれるようになりました (「mypicture」などの些細なことや、「jpg」などのファイルタイプのいずれか)。ここでやりたいことは、入力文字列の一部を含むすべてのルールを取得するクエリを書きたいということです。次の例を試してみました:文字列値 = "somepicturefilename.jpg"

私の声明:

"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE instr('"+ value + "',rule)!=0 ORDER BY " + KEY_ID+ " DESC;"

ステートメントはJavaであるため、「値」をステートメントに挿入する必要があります。

ただし、これは機能しません。私はSQLにもSQLiteにも精通していません。誰かtip=を持っていますか?)ありがとう。

編集:charindexも試しましたが、どちらも機能しませんでした。

編集:より詳細な例です。以下のデータベースが提供されます。

id --- rule ---
1      "jpg"
2     "ponies"
3     "gif"
4     "pdf"  

ここで、ユーザーはファイル名を入力します。「poniesAsUnicorns.jpg」としましょう。したがって、「poniesAsUnicorns.jpg」は入力文字列であり、「poniesAsUnicorns.jpg」には「jpg」と「ponies」の両方が含まれているため、クエリは id#1 と id#2 の両方に一致する必要があります。

それが私が望むものを明確にすることを願っています。

編集:これも私が試したものです:

String statement = "SELECT DISTINCT * FROM " + TABLE_RULES
            + " WHERE charindex(rule,'" + value
            + "') > 0 ORDER BY " + KEY_ID + " DESC;";

ただし、「そのような操作はありません」という例外がスローされます。

4

5 に答える 5

3

AFAIKinstr()は利用できないため、次を使用できます。

select * from table where replace("poniesAsUnicorns.jpg", rule, "") != "poniesAsUnicorns.jpg"; 

または大文字と小文字を区別しない一致の場合:

select * from table where replace(upper("poniesAsUnicorns.jpg"), upper(rule), "") != upper("poniesAsUnicorns.jpg");
于 2013-04-23T23:31:40.893 に答える
0
"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE rule LIKE '%"+ value + "%' ORDER BY " + KEY_ID+ " DESC;"

これを試してください。

于 2013-04-23T22:32:06.773 に答える
0
"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE '" + value + "' like '%' || rule || '%' ORDER BY " + KEY_ID + " DESC;"
于 2013-04-24T08:18:45.010 に答える
0

LIKE パターンでは、パーセンテージ (%) の代わりにアンダースコア (_) を使用します。アンダースコアは、文字列シーケンス全体ではなく、値内の任意の 1 文字に一致します。

"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE rule LIKE '_"+ value + "_' ORDER BY " + KEY_ID+ " DESC;"

LIKE 演算子

于 2013-04-23T23:50:32.293 に答える