as.siggi
Goto Top

SQL Abfrage mit Platzhaltern

Hallo,

ich komme bei einem Problem leider nicht weiter. Ich habe eine Datenbank und darin eine Tabelle wo ich Zahlen abspeichere, nun soll nach diesen Zahlen gesucht werden. Dies ist ja einfach und klappt auch wunderbar.
Nun muss ich auch Zahlen mit Platzhalter in die Tabelle einfügen( ungefähr so 1494##) also, dass ich eine Abfrage mit einer bestimmten Zahl mache und diese Datensätze auch ausgegeben werden. Z.B. 1494## soll herauskommen wenn 149401, 149402, usw. in der Abfrage übergeben wird.

  1. als Platzhalter für alle möglichen Zahlen (kann auch ein anderes Zeichen sein)

Mit freundlichen Grüßen Alex

Content-Key: 248055

Url: https://administrator.de/contentid/248055

Printed on: April 20, 2024 at 04:04 o'clock

Member: LianenSchwinger
LianenSchwinger Sep 02, 2014 at 11:35:44 (UTC)
Goto Top
Hallo Alex,

das geht nicht. Wenn die Datenspalte als NUMBER deklariert ist können auch nur Zahlen gespeichert werden.
Dein Anliegen ginge nur zu realisieren wenn Du die Spalten als CHAR deklarierst.

G Jörg
Member: emeriks
emeriks Sep 02, 2014 updated at 12:04:10 (UTC)
Goto Top
Hi,
sofern die Zahlen eine feste Länge haben, wäre das doch eine klassische Von-Bis-Abfrage, oder nicht?

"1494##" bedeutet doch nichts anderes als ">=149400 und <149500".

Also z.B.

SELECT *
FROM Tabelle
WHERE Zahl >= 149400 AND Zahl < 149500

E.
Member: as.siggi
as.siggi Sep 02, 2014 at 12:03:17 (UTC)
Goto Top
Hallo Jörg

das ist klar, dass ich nicht als INT abspeichere sondern als VARCHAR(6).

MfG Alex
Member: emeriks
emeriks Sep 02, 2014 at 12:05:35 (UTC)
Goto Top
Na dann mit LIKE

SELECT *
FROM Tabelle
WHERE Zahl LIKE '1494%'  

E.
Member: as.siggi
as.siggi Sep 02, 2014 at 12:06:05 (UTC)
Goto Top
Hallo emeriks

nein eben nicht, da ich ja nicht die genaue Zahl in der Datenbank habe sondern nur die Zahl mit den Platzhaltern und die genaue Zahl von außen übergeben bekomme.

MfG Alex
Member: emeriks
emeriks Sep 02, 2014 at 12:08:24 (UTC)
Goto Top
Wie jetzt?
Du hast in der DB z.B. "1494##" stehen und willst nach z.B. "149411" suchen und dann dafür denn Datensatz mit "1494##" in der Ausgabe haben?

E.
Member: SlainteMhath
SlainteMhath Sep 02, 2014 at 12:08:55 (UTC)
Goto Top
Moin,

das geht nur wenn du das "Muster" nachdem gesucht wird als Intervall oder Liste angeben kannst,
1494## entspricht z.b. 149400 bis 149499
1#9400 entspricht z.b. 119400, 129400, 139400 usw.

Wenns komplexer wird, müsstest du tatsächlich die Zahlen als (var)char abspeichern und mit entsprechenden (regulären) Ausdrücken durchsuchen.

Ggfs. kannst du aber auch die gespeicherte Zahl direkt in WHERE Klausel in einen varchar umwandeln und entsprechend filtern... aber performant ist das dann nicht mehr,

lg,
Slainte
Member: as.siggi
as.siggi Sep 02, 2014 at 12:37:02 (UTC)
Goto Top
Moin,

also muss ich wohl oder über eine "von bis" Lösung verwenden und dann mit BETWEEN abfragen. Ist zwar nicht das was ich mir vorgestellt habe, aber wenn nicht anders geht.

MfG Alex
Member: MadMax
MadMax Sep 02, 2014 at 15:53:41 (UTC)
Goto Top
Hallo Alex,

welche Datenbank verwendest Du?
Und wie sollen die Abfragen genau aussehen? In der DB sind anscheinend die Zahlen mit Platzhaltern, und wie suchst Du, nach genauen Zahlen oder auch mit Platzhaltern? Wenn Du nach genauen Werten suchst, würde das mit SQL Server z.B. so aussehen:
select * from Tabelle where '149401' like replace (Spalte, '#', '_')  
Anmerkung 1: Für die Geschwindigkeit gebe ich keine Garantie.
Anmerkung 2: Wenn Du als Platzhalter gleich den Unterstrich nimmst, dann sparst Du Dir das replace.

Wenn Du auch mit Platzhaltern suchen willst, dann dürfte das nicht so einfach gehen.

Gruß, Mad Max
Member: as.siggi
as.siggi Sep 04, 2014 at 17:26:45 (UTC)
Goto Top
Hallo

Ich werde jetzt eine komplexere "von-bis" Lösung verwenden.

Danke trotzdem!