MSSQL 2008 LIKE ..0-9.. liefert auch Ergebnisse mit Buchstaben
Hallo an alle Datenbankgurus
wir haben eine Artikel-Tabelle mit dem Feld artikel nvarchar(22).
Ich möchte mit
select artikel from artikel
where artikel like N'24%[0123456789]'
nur die Datensätze selektieren,
die nach der "24" nur noch numerische Zeichen stehen haben.
MSSQL 2008 liefert mir aber auch z.B.:
244922/6
245285ST10
245285ST8
245286ST6
245286ST7
24-5422804
246079 Blatt 10
246605702_1
246913700 bis Mai 2011
246913816 bis Mai 2011
246977-001
24-7647-001
selbst mit zusätzlich ... and artikel like N'24%[^a-z]%[^A-Z]%[0-9]%[^a-z]%[^A-Z]'
bekomme ich das selbe Ergebnis.
mit ..and ISNUMERIC(artikel)=1 fallen obige Ergebnisse raus, aber das sollte doch nicht die Lösung sein.
Ich finde auch keine passende SET-Anweisung.
Was mache ich da falsch?
Grüße
wir haben eine Artikel-Tabelle mit dem Feld artikel nvarchar(22).
Ich möchte mit
select artikel from artikel
where artikel like N'24%[0123456789]'
nur die Datensätze selektieren,
die nach der "24" nur noch numerische Zeichen stehen haben.
MSSQL 2008 liefert mir aber auch z.B.:
244922/6
245285ST10
245285ST8
245286ST6
245286ST7
24-5422804
246079 Blatt 10
246605702_1
246913700 bis Mai 2011
246913816 bis Mai 2011
246977-001
24-7647-001
selbst mit zusätzlich ... and artikel like N'24%[^a-z]%[^A-Z]%[0-9]%[^a-z]%[^A-Z]'
bekomme ich das selbe Ergebnis.
mit ..and ISNUMERIC(artikel)=1 fallen obige Ergebnisse raus, aber das sollte doch nicht die Lösung sein.
Ich finde auch keine passende SET-Anweisung.
Was mache ich da falsch?
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 254872
Url: https://administrator.de/contentid/254872
Ausgedruckt am: 25.11.2024 um 15:11 Uhr
7 Kommentare
Neuester Kommentar
Warum sollte das nicht die Lösung sein?
mit like sagst du ihm ja, dass es änlcih sein soll. SQL-Anweisungen schreiben ist nicht meine Stärke, aber ichv erstehe sie ganz gut und mich überrascht das Ergebnis nicht. Übersetzen wir das mal in Umgangssprache, sagst du ihm:
"Zeige mir die Datensätze, die mit 24 beginnen und dann Zahlen und sowas kommen". Dadurch bekommst du die änlichen Werte auch zurück, die du nicht willst. Wie gesagt bin ich da nicht so fit, aber hast du schon einmal andere Vergleichsoperatoren ausprobiert? Zum Beispiel anstelle des Like ein IS eingesetzt?
mit like sagst du ihm ja, dass es änlcih sein soll. SQL-Anweisungen schreiben ist nicht meine Stärke, aber ichv erstehe sie ganz gut und mich überrascht das Ergebnis nicht. Übersetzen wir das mal in Umgangssprache, sagst du ihm:
"Zeige mir die Datensätze, die mit 24 beginnen und dann Zahlen und sowas kommen". Dadurch bekommst du die änlichen Werte auch zurück, die du nicht willst. Wie gesagt bin ich da nicht so fit, aber hast du schon einmal andere Vergleichsoperatoren ausprobiert? Zum Beispiel anstelle des Like ein IS eingesetzt?
RTFM.
Laut MS Doku (http://msdn.microsoft.com/de-de/library/ms179859.aspx):
% = Eine Zeichenfolge aus null oder mehr Zeichen
[ ] = Beliebiges einzelnes Zeichen im angegebenen Bereich ([a-f]) oder in der angegebenen Menge ([abcdef]).
Wo steht da, daß % als beliebige Anzahl Zeichen der angegebenen Menge gesucht wird?
% steht für eine beliebige Zeichenfolge, also auch mit Buchstaben.
Also beliebig viele Zahlen wird nur mit isnumeric gehen.
Laut MS Doku (http://msdn.microsoft.com/de-de/library/ms179859.aspx):
% = Eine Zeichenfolge aus null oder mehr Zeichen
[ ] = Beliebiges einzelnes Zeichen im angegebenen Bereich ([a-f]) oder in der angegebenen Menge ([abcdef]).
Wo steht da, daß % als beliebige Anzahl Zeichen der angegebenen Menge gesucht wird?
% steht für eine beliebige Zeichenfolge, also auch mit Buchstaben.
Also beliebig viele Zahlen wird nur mit isnumeric gehen.
Hallo diavolo,
das Thema ist zwar schon abgeschlossen, aber hier noch eine Lösung ohne isnumeric, die auch gleich die Kommazahlen rausholt:
Gruß, Mad Max
das Thema ist zwar schon abgeschlossen, aber hier noch eine Lösung ohne isnumeric, die auch gleich die Kommazahlen rausholt:
select *
from artikel
where artikel like '24%[1-9]%' and -- alles was mit '24' anfängt und hintendran Ziffern hat
artikel not like '%[^1-9]%' -- alles ausschliessen, was andere Zeichen als Ziffern hat
Gruß, Mad Max