diavolo
Goto Top

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

Content-Key: 254872

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

Printed on: April 24, 2024 at 14:04 o'clock

Member: Doskias
Solution Doskias Nov 14, 2014 updated at 15:27:22 (UTC)
Goto Top
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?
Member: AndreasHoster
Solution AndreasHoster Nov 14, 2014 updated at 15:27:12 (UTC)
Goto Top
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.
Member: diavolo
diavolo Nov 14, 2014 at 15:21:01 (UTC)
Goto Top
Danke, hast mir die Augen geöffnet
Glaub mir, ich hab TFM mehrfach gelesen, aber eben immer falsch interpretiert.

Außerdem würde ich schwören, dass ich bei msdn ein Beispiel gesehen habe um rein numerische Postleitzahlen
mit ".. like '%[1-9] " zu selektieren, finde ich aber nicht mehr.

isnumeric liefert halt auch bei "24123.123" TRUE,
die Sätze bekomme ich natürlich auch weg, ist halt nicht so elegant wie mein falscher Ansatz.
Member: diavolo
diavolo Nov 14, 2014, updated at Nov 17, 2014 at 08:42:27 (UTC)
Goto Top
Danke, habe fälschlicherweise angenommen, dass %[1-9] bedeutet beliebig viele Zeichen aus [1-9].
Wie vorhin geschrieben ist isnummeric auch nicht die alleinige Lösung.
Member: MadMax
Solution MadMax Nov 14, 2014, updated at Nov 17, 2014 at 08:46:30 (UTC)
Goto Top
Hallo diavolo,

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
Member: diavolo
diavolo Nov 17, 2014 at 08:46:24 (UTC)
Goto Top
Danke Mad Max,
das ist eindeutig die sauberste Lösung (allerdings mit ..[0-9]...)


Gruß diavolo
Member: MadMax
MadMax Nov 17, 2014 at 12:19:37 (UTC)
Goto Top
Natürlich [0-9], war ne lange Woche face-wink

Gruß, Mad Max