SQL Syntax 4 stellig
ss80
- sql
0 Der Martin1 robertroth0 Der Martin
1 dedlfix0 robertroth0 dedlfix0 Daniela Kruse
0 Tabellenkalk
Hallo zusammen
Zu meinem Problem ich erhalte per POST-Request eine Zahl zwischen 1 und 9. Danach möchte ich anschliessend mit dieser Zahl in einer Spalte suchen.
Die Einträge in der Spalte sind zum Teil 1 bis 4 stellig.
Wie kann ich im SQL Syntax angeben das er nur nach 4 stelligen Einträgen suchen soll?
Logischerweise wenn ich jetzt SpalteX LIKE '1%' findet er mir folgende:
1 11 111 1111
Jedoch möchte ich davon nur 1111 erhalten (alle 4 stelligen).
Danke und Gruss ss80
Hallo,
Wie kann ich im SQL Syntax angeben das er nur nach 4 stelligen Einträgen suchen soll?
vierstellig heißt, größer oder gleich 1000 und kleiner als 10000.
Warum einfach, wenn's auch umständlich geht? ;-)
Ciao,
Martin
Liebe Mitdenker, liebe Wissende, liebe Neugierige,
ja!
Wie kann ich im SQL Syntax angeben das er nur nach 4 stelligen Einträgen suchen soll?
vierstellig heißt, größer oder gleich 1000 und kleiner als 10000.
Warum einfach, wenn's auch umständlich geht? ;-)
Das hängt aber davon ab, welchen Typ wie die Spalte hat. Man kann schließlich '1234' auch in einer Spalte eines Stringtyps speichern.
Spirituelle Grüße
Euer Robert
Hallo,
vierstellig heißt, größer oder gleich 1000 und kleiner als 10000.
Warum einfach, wenn's auch umständlich geht? ;-)Das hängt aber davon ab, welchen Typ wie die Spalte hat. Man kann schließlich '1234' auch in einer Spalte eines Stringtyps speichern.
das stimmt natürlich, aber ein sinnvolles Datenmodell hatte ich stillschweigend vorausgesetzt. Immerhin war im Startposting immer von Zahlen die Rede.
Ciao,
Martin
Lieber Martin, liebe Mitdenker, liebe Wissende, liebe Neugierige,
ja!
vierstellig heißt, größer oder gleich 1000 und kleiner als 10000.
Warum einfach, wenn's auch umständlich geht? ;-)Das hängt aber davon ab, welchen Typ wie die Spalte hat. Man kann schließlich '1234' auch in einer Spalte eines Stringtyps speichern.
das stimmt natürlich, aber ein sinnvolles Datenmodell hatte ich stillschweigend vorausgesetzt. Immerhin war im Startposting immer von Zahlen die Rede.
Ich habe das allerdings auch nicht fertig vorgekaut. Denn die Randbedingung lautete, dass die Ziffer '1' nur einmal in einer (vierstelligen) Ziffernfolge vorkommen sollte. Das läuft vermutlich doch auf einen Stringvergleich hinaus oder auf einen RegExp, was ja eigentlich auch ein komplexer Stringvergleich ist.
Spirituelle Grüße
Euer Robert
Lieber Martin, liebe Mitdenker, liebe Wissende, liebe Neugierige,
ja!
Ich habe das allerdings auch nicht fertig vorgekaut. Denn die Randbedingung lautete, dass die Ziffer '1' nur einmal in einer (vierstelligen) Ziffernfolge vorkommen sollte.
Und das stellt sich bei nochmaligem Lesen auch noch als falsch heraus höhöhö
Anregungen sollte der OP inzwischen aber genügend haben ;-)
Spirituelle Grüße
Euer Robert
Tach!
Wie kann ich im SQL Syntax angeben das er nur nach 4 stelligen Einträgen suchen soll?
Logischerweise wenn ich jetzt SpalteX LIKE '1%' findet er mir folgende:
Es gibt zwei Jokerzeichen für LIKE, % steht für mehrere Zeichen, _ (Unterstrich) für ein einzelnes.
dedlfix.
Lieber Dedlfix, liebe Mitdenker, liebe Wissende, liebe Neugierige,
ja!
Wie kann ich im SQL Syntax angeben das er nur nach 4 stelligen Einträgen suchen soll?
Logischerweise wenn ich jetzt SpalteX LIKE '1%' findet er mir folgende:
Es gibt zwei Jokerzeichen für LIKE, % steht für mehrere Zeichen, _ (Unterstrich) für ein einzelnes.
Zielführender wird hier aber
WHERE LENGTH(`spalte`) = 4 AND `spalte`LIKE '%1%'
sein, und zwar genau in dieser Reihenfolge. Erst die billige Bedingung und dann die teure. Length()
Obiges führt allerdings auch noch zu "ätsch', weil die '1' hier auch noch mehrmals vorkommen darf im Spaltenwert.
Da Könnte man nun abfragen, wie oft der Substring '1' im Spaltenwert vorkommt, indem man die Länge des Spaltenwertes abfragt, dann alle Vorkommen von '1' im Spaltenwert ersetzt durch '' und dann die Länge erneut feststellt. Länge_1 - Länge_2 muss dann der geforderten Anzahl von Vorkommen sein. Prima, lässt sich alles in einer geschachtelten Funktion schreiben, ist aber auch nicht mehr ganz billig.
Außerdem gäbe es auch noch, wenn man es ganz universell und teuer machen will, Regexp()
Die Beispiele aus MySQL, weil kein DBMS angegeben war.
Spirituelle Grüße
Euer Robert
Tach!
Wie kann ich im SQL Syntax angeben das er nur nach 4 stelligen Einträgen suchen soll? Logischerweise wenn ich jetzt SpalteX LIKE '1%' findet er mir folgende:
Es gibt zwei Jokerzeichen für LIKE, % steht für mehrere Zeichen, _ (Unterstrich) für ein einzelnes.
Zielführender wird hier aber
WHERE LENGTH(`spalte`) = 4 AND `spalte`LIKE '%1%'
sein,
Das ist nun aber etwas hineininterpretiert, was so nicht ganz klar in der Frage stand. Der gezeigte Code geht davon aus, dass die gesuchte Ziffer am Anfang vorkommt. Die Frage ist, ob das so richtig ist oder ob die Ziffer doch an beliebiger Stelle stehen soll.
und zwar genau in dieser Reihenfolge. Erst die billige Bedingung und dann die teure.
Wenn sie nur am Anfang vorkommen soll, ist LIKE '1____' ohne Längenprüfung anzunehmenderweise performant genug, wenn ein Index auf der Spalte sitzt.
Obiges führt allerdings auch noch zu "ätsch', weil die '1' hier auch noch mehrmals vorkommen darf im Spaltenwert.
Das Beispiel 1111 zeigt, dass Mehrfachvorkommen wohl unproblematisch sind. Nicht ganz klar zu entnehmen ist, ob nur 1111 gefunden werden soll oder auch zum Beispiel 1234.
dedlfix.
Huhu
WHERE LENGTH(
spalte
) = 4 ANDspalte
LIKE '%1%'sein, und zwar genau in dieser Reihenfolge.
Die Reihenfolge von Bedingungen innerhalb von where ist völlig irrelevant. Der Optimizer der Datenbank schiebt sich das so zurecht, wie das am effizientesten ausgeführt werden kann.
Btw, wenn spalte
nummerisch sein sollte, bedeutet ein Vergleich mit Like immer eine Typkonvertierung, damit wäre dann kein normaler Index mehr nutzbar. Für Zahlen wäre also eine Suche wie
spalte between 1000 and 1999
erheblich effizienter.
Gruss Daniela
Liebe Mitdenker, liebe Wissende, liebe Neugierige,
ja!
Huhu
WHERE LENGTH(
spalte
) = 4 ANDspalte
LIKE '%1%'sein, und zwar genau in dieser Reihenfolge.
Die Reihenfolge von Bedingungen innerhalb von where ist völlig irrelevant. Der Optimizer der Datenbank schiebt sich das so zurecht, wie das am effizientesten ausgeführt werden kann.
Wenn das DBMS denn einen Optimizer hat... MMn ist es nicht verkehrt, das in einer plausibel "richtigen" Reihenfolge zu notieren. WEnn das DBMS dann einen Optimizer hat, ist es ja kein Schaden!
Btw, wenn
spalte
nummerisch sein sollte, bedeutet ein Vergleich mit Like immer eine Typkonvertierung, damit wäre dann kein normaler Index mehr nutzbar. Für Zahlen wäre also eine Suche wiespalte between 1000 and 1999
Das hatten wir schon diskutiert. MMn hat hier der deklarierte Spaltentyp Priorität und nicht der übergebene Suchstring. Der muss dann ggf. allerdings umgewandelt werden.
Wenn die Spalte als Stringtyp deklatiert wurde, wird sie sich eventuell wohl kein "between" gefallen lassen.
Spirituelle Grüße
Euer Robert
Hallo,
spannend wirds, wenn nach Eingabe der 0 Zahlen gefunden werden sollen, die weniger als 4 Stellen haben...
Gruß Kalk