none
Datensätze mit Sonderzeichen ausgeben RRS feed

  • 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
    Mittwoch, 12. Oktober 2011 16:53

Antworten

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
    Mittwoch, 12. Oktober 2011 17:12
    Moderator
  • 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

    Freitag, 14. Oktober 2011 20:08
  • 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

    Samstag, 15. Oktober 2011 20:00