Groß- / Kleinschreibung für Zeichenfolgen aus einem Array nicht beachten?

8

Ich habe eine Situation, in der ich Objekte aus meinem Kerndatenspeicher nach dem Benutzernamenschlüssel holen möchte, aber ich möchte, dass der Vergleich nicht zwischen Groß- und Kleinschreibung unterscheidet. Das Prädikat, das ich habe, ist das:

%Vor%

Ich mache dann eine Variablensubstitution mit einem Array von Strings, die die Benutzernamen sind, die ich finden möchte. Es funktioniert, aber ist die Groß- und Kleinschreibung. Ich würde gerne so etwas machen, denke ich:

%Vor%

Leider scheint das nicht zu funktionieren. Der String-Vergleich muss immer noch unter Berücksichtigung der Groß- und Kleinschreibung erfolgen. (Ich bekomme keine Fehlermeldung darüber, dass es sich um eine nicht unterstützte Abfrage handelt.)

Gibt es eine andere Möglichkeit, dieses Prädikat zu schreiben, so dass es so funktioniert, wie ich es brauche, oder fehlt mir hier etwas Offensichtliches?

    
Sean 06.01.2010, 22:58
quelle

4 Antworten

9

Der Case-Modifikator des IN-Operators wird anscheinend ignoriert, wenn ein Abruf für den SQLite-Speicher ausgeführt wird. (Sie haben den Geschäftstyp aus Ihrer Frage weggelassen.)

Ich würde empfehlen, einen Fehler in der Dokumentation einzureichen, damit diese Einschränkung / dieses Verhaltens dokumentiert werden kann.

Ich würde auch empfehlen, eine Feature-Anfrage im Bug-Reporter zu hinterlegen, damit dies für zukünftige Unterstützung in Betracht gezogen werden kann.

In der Zwischenzeit müssen Sie Ihre Abrufanforderung aus dem Datenmodell herausholen und sie programmatisch aufbauen. Sie können ein zusammengesetztes Prädikat ODER Prädikat erstellen, das für jeden Ihrer Werte eine Übereinstimmung ohne Berücksichtigung der Groß- / Kleinschreibung berücksichtigt (und prüft, ob es Ihren Leistungsanforderungen entspricht).

Beachten Sie, dass der Fallmodifikator on == nicht unterstützt wird, wenn Sie OS-Ziele vor 10.6 unterstützen. In diesem Fall ist noch eine alternative Lösung erforderlich.

    
Jim Correia 07.01.2010, 02:19
quelle
1

Sie könnten etwas wie ANY $usernames LIKE[c] username versuchen. Ich habe etwas Ähnliches getan, wo ich anstelle der variablen Substitution nur einen Schlüsselpfad wie "Personen.Name" habe, und dieses Prädikat funktioniert für mich. Nicht sicher, ob es anders als mit einer Variable dort statt einem Schlüsselpfad funktioniert, aber es ist einen Versuch wert.

    
Brian Webster 07.01.2010 03:39
quelle
1

Hier ist eine andere Problemumgehung, aber Sie müssen die MOM ändern.

Machen Sie den Benutzernamen zu einer vollständigen Entität. Erstellen Sie die umgekehrte Beziehung zwischen Benutzername und was auch immer Ihre andere Entität ist.

Legen Sie nun für die Abrufanforderung die Entität auf "Benutzername" fest und führen Sie dann dieses Prädikat aus (unter der Annahme einer Eigenschaft "name" und "parent"):

%Vor%

Dies ist möglicherweise zu viel, aber Sie können Ihre Suche nach Wunsch ausführen.

    
Corey Floyd 07.01.2010 17:59
quelle
-1

Obwohl diese Frage mehrere Jahre alt ist, bin ich einfach auf dasselbe Problem gestoßen und habe es so gelöst:

%Vor%

Dies erstellt einen statischen Prädikatausdruck aus der Werteliste. Vielleicht wird es für jemanden nützlich sein.

UPDATE 2:

Tatsächlich scheint es so, als ob die aktualisierte Lösung unten nicht mit sqlite funktioniert und ein

erzeugt %Vor%

Ich denke, für Array / dict / set Vergleiche und IN gibt es nur Schlüssel auf der linken Seite des Operators erlaubt.

UPDATE:

Nach einigen Recherchen über Ausdrücke und Prädikate habe ich einen anderen Ansatz gefunden, der ziemlich gut zu funktionieren scheint:

%Vor%

Dies verwendet den Funktionsausdruck lowercase: , um die Kleinschreibung des Wertes zu erhalten. Alles, was noch zu tun ist, ist sicherzustellen, dass alle Einträge von values in Kleinbuchstaben geschrieben sind und Sie in der Lage sind, code-insensitive IN -Ausdrücke zu verwenden.

    
lupz 13.04.2015 11:40
quelle

Tags und Links