Abfrage soll die Ergebnisse CASE INSENSITIVE ausgeben. SQLite.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Abfrage soll die Ergebnisse CASE INSENSITIVE ausgeben. SQLite.

    Hallo,

    Die Überschrift sagts ja eigentlich schon:
    Ziel ist, dass eine Select Abfrage die Ergebnisse in "case-insensitiver" Reihenfolge wiedergibt. Abgefragt wird nur nach chars, die sich auch nur in einer einzigen Spalte befinden.

    Bisher versucht:
    - const char* erstellt wie: "SELECT aColumn FROM aTable COLLATE NOCASE"
    - Diesen const char* in sqlite3_get_table() verwendet.
    - Die Fehlermeldung der sqlite3_get_table() lautete wie folgt: "no such collation sequence: nocase"

    In diesem Dokument steht ein Wenig dazu (jedoch habe ich eigentlich alles so gemacht, wie es dort steht): sqlite.org/datatype3.html#collation

    Das Merkwürdige ist, dass selbige Abfrage mit COLLATE BINARY oder COLLATE RTRIM keine Fehlermeldung verursacht.
    Würde mich sehr über einen Tip freuen. :)

    Gruß,

    druesbe
  • Jap, Dankeschön.

    Ich mache mir jetzt aber ein bisschen Sorgen um die Performance. Sind die gerechtfertigt? / Die Spalte soll dauerhaft so abgefragt werden, sind andere mögliche Lösungen evtl. performanter?
    (die Abfrage wird wirklich sehr häufig und auf eine sehr großen DB ausgeführt, kleine Performanceunterschiede machen da schon viel aus).

    PS: Hab's jetzt mal auf einem Device geprüft und die Performance ist gefühlt gar nicht beeinflusst. :whistling: Also thx nochmal.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von DrUeSBe ()

  • DrUeSBe schrieb:

    Ich mache mir jetzt aber ein bisschen Sorgen um die Performance. Sind die gerechtfertigt?

    Nein, Du machst DIr einen Kopp um Probleme, wo keine sind.

    DrUeSBe schrieb:

    Die Spalte soll dauerhaft so abgefragt werden, sind andere mögliche Lösungen evtl. performanter?

    Welche anderen Lösungen?

    Jedes einigermaßen sauber implementierte Datenbanksystem wird performanter und stabiler diese Aufgabe bewältigen, als Du es jemals schaffen wirst. Ich kene SQLite nicht besonders gut. Aber vermutlich steckt da mehr Entwicklungszeit drin als Du je vor einem Rechner verbracht hast. Und da rechne ich die Erfahrungen, die aus Lehr- und Fachbüchern in die Entwicklung mit eingeflossen sind, nicht mit.
    „Meine Komplikation hatte eine Komplikation.“
  • Aber Pascal, hast du denn das einführende Posting nicht gelesen? ;)

    DrUeSBe schrieb:

    Bisher versucht:
    - const char* erstellt wie: "SELECT aColumn FROM aTable COLLATE NOCASE"
    - Diesen const char* in sqlite3_get_table() verwendet.
    - Die Fehlermeldung der sqlite3_get_table() lautete wie folgt: "no such collation sequence: nocase"
    ...
    Das Merkwürdige ist, dass selbige Abfrage mit COLLATE BINARY oder COLLATE RTRIM keine Fehlermeldung verursacht.
    Würde mich sehr über einen Tip freuen. :)


    Pascal schrieb:


    SQL-Abfrage

    1. SELECT x FROM y ORDER BY x COLLATE NOCASE ASC

    Ah, der Querystring des OP war vermutlich fehlerhaft.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Pascal schrieb:

    Ich hätte meinen Post mit "Also" beginnen sollen. ;)

    Hätte ja auch nix geändert...
    "(Also )Ich mach sortiere das mit nach COLLATE NOCASE."
    Das ist meiner Meinung nach der springende Punkt.
    Mit COLLATE NOCASE 'gemacht' hat DrUeSBe das ja auch. ;)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Lucas de Vil schrieb:

    Hätte ja auch nix geändert...
    "(Also )Ich mach sortiere das mit nach COLLATE NOCASE."
    Das ist meiner Meinung nach der springende Punkt.
    Mit COLLATE NOCASE 'gemacht' hat DrUeSBe das ja auch. ;)

    Erstaunlich wie viel die Betonung ausmachen kann. Vorgestellt hatte ich mir das im Sinn von "Also, auch wenn du sagst es geht nicht, ich mach das trotzdem mit COLLATE NOCASE.". :D :D
    Widgetschmie.de • Life is too short for gadgets
  • Stimmt. Ist manchmal echt schräg. :)

    Pascal schrieb:

    "Also, auch wenn du sagst es geht nicht, ich mach das trotzdem mit COLLATE NOCASE.". :D :D

    Jo, passt auch. :D
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P