4 Stimmen

Alle Datensätze abrufen, die eine Zahl enthalten

Ist es möglich, eine Abfrage zu schreiben, um alle Datensätze aus einer Tabelle zu erhalten, in der ein bestimmtes Feld einen numerischen Wert enthält?

etwas wie "select street from tbladdress where street like '%0%' or street like '%1%' ect ect"

nur noch mit einer Funktion?

14voto

priyanka.sarkar Punkte 24468

Versuchen Sie dies

declare @t table(street varchar(50))
insert into @t 
    select 'this address is 45/5, Some Road' union all
    select 'this address is only text'

select street from @t
where street like '%[0-9]%'

Straße

this address is 45/5, Some Road

6voto

martin clayton Punkte 74309

Ja, aber es wird ineffizient und wahrscheinlich langsam sein, mit einem Platzhalter an der Spitze des Musters

LIKE '%[0-9]%'

1voto

paxdiablo Punkte 809679

Die Suche nach Text innerhalb einer Spalte ist erschreckend ineffizient und lässt sich nicht gut skalieren (Funktionen pro Zeile haben in der Regel alle dieses Problem).

Was Sie tun sollten, ist, Speicherplatz (der billig ist) gegen Leistung (die teuer ist) zu tauschen. niemals billig) durch Anlegen einer neuen Spalte, hasNumerics z. B. durch Hinzufügen eines Indexes und anschließende Verwendung eines Einfüge-/Aktualisierungstriggers, um ihn auf der Grundlage der Daten zu setzen, die in die eigentliche Spalte eingehen.

Dies bedeutet, dass die Berechnung durchgeführt wird nur wenn die Zeile erstellt oder geändert wird, nicht jedes einzelne Mal Sie extrahieren die Daten. Datenbanken sind fast siempre Sie werden viel öfter gelesen als geschrieben, und mit dieser Lösung können Sie die Kosten für die Berechnung über viele Jahre hinweg amortisieren. select Anweisungsausführungen.

Wenn Sie dann Ihre Daten benötigen, verwenden Sie einfach:

select * from mytable where hasNumerics = 1; -- or true or ...

und beobachten Sie, wie es eine Abfrage mit regulärem Ausdruck hinterlässt oder like '%...%' Ungeheuerlichkeit in ihren Staub.

1voto

Susan Raj Punkte 11

Um Zeilen abzurufen, die nur Zahlen enthalten, verwenden Sie diese Abfrage

select street 
from tbladdress 
where upper(street) = lower(street)

Arbeitet in Orakel .

0voto

Ivo Punkte 3333

Ich habe folgende Lösung gefunden: "select street from tbladresse with(nolock) where patindex('%[0-9]%',street) = 1"

Ich habe 2 Minuten gebraucht, um 3 Millionen in einem nicht indizierten Feld zu suchen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X