Benutzer mit den meisten Antworten
Datensätze mit Sonderzeichen ausgeben

Frage
-
Hallo,
ich muss eine Tabelle durchgehen und betreffende Datensätze per Select ausgeben bei denen in einem Textfeld Sonderzeichen wie "+, /, \ etc enthalten sind, in einem weiteren Feld darf zudem auch kein Leerzeichen enthalten sein.
Ich möchte dazu per Select die entsprechenden Datensätze auflisten um diese dann zu analysieren.
Leider entzieht es sich meiner Kenntnis (oder besser Können :-) ) wie ich per Select alle Datensätze einmal ausgebe in denen mindestens ein Sonderzeichen oder Leerzeichen enthalten ist.
Ich wäre Euch dankbar für ein Tipp wie ich ein Select (und SubSelect) erstellen muss damit ich diese Datensätze auflisten kann.
Vielen Dank im voraus,
Maximilian- Bearbeitet MaxiTesch Mittwoch, 12. Oktober 2011 16:53
Antworten
-
Hallo Maximilian,
bspw. so:
SELECT * FROM <Tabelle> WHERE ( <Spalte> LIKE '%[ \/+-]%' )
Siehe dazu auch:
http://msdn.microsoft.com/de-de/library/ms179859.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Christoph Muthmann Donnerstag, 13. Oktober 2011 07:15
- Als Antwort markiert MaxiTesch Freitag, 14. Oktober 2011 20:06
Alle Antworten
-
Hallo Maximilian,
bspw. so:
SELECT * FROM <Tabelle> WHERE ( <Spalte> LIKE '%[ \/+-]%' )
Siehe dazu auch:
http://msdn.microsoft.com/de-de/library/ms179859.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Christoph Muthmann Donnerstag, 13. Oktober 2011 07:15
- Als Antwort markiert MaxiTesch Freitag, 14. Oktober 2011 20:06
-
Hi Stefan,
vielen dank, das hat mir geholfen. Leider komme ich wohl um einen Cursor nicht herum da ich nun auch nach Sonderzeichen zwischen ASCII 0 bis 31 suchen muss. Irgendwie haben sie diese Zeichen in ein Textfeld eingeschlichen und machen gerade nette Probleme.
Viele Grüsse,
Maximilian -
Hallo Maxi,
mit PATINDEX ließe sich das (fast) auch realisieren:
DECLARE @Daten TABLE ( id int, daten varchar(40)); INSERT INTO @Daten VALUES (1, 'ABC' + CHAR(0x00) + 'DEF'), (2, 'DEF' + CHAR(0x01) + 'GHI'), (3, 'DEF' + + CHAR(0x03)), (4, CHAR(0x1f) + 'JKL'), (5, 'GHI' + CHAR(0x7f)), (6, 'XYZ' ); DECLARE @controlchars varchar(255) = '' DECLARE @index int = 0; WHILE @index < 32 BEGIN SET @controlchars += CHAR(@index); SET @index += 1; END; SET @controlchars += CHAR(127); SET @controlchars = '%[' + @controlchars + ']%'; SELECT id FROM @Daten WHERE PATINDEX( @controlchars, daten) > 0;
Mit dem kleinen Wermutstropfen, dass 0x00 (NUL) nicht erkannt wird.
Da dürfte wohl eine C / ASCIIZ-Überprüfung (evtl. aus Sicherheitsgründen) dazwischenfunken.Gruß Elmar