Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

pattern-Erkennung

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von ukulele, 17 November 2014.

  1. ukulele

    ukulele Datenbank-Guru

    Ich habe ein recht komplexes Script was mir aus einer Textmeldung (die mir nunmal nicht anders vorliegt) mehrere Informationen extrahiert. Wenn es eine Information findet, schreibt es sie in eine extra Tabelle und ersetzt die Information erstmal durch einen Platzhalter #00#. Anhand dieses Platzhalters orientiere ich mich dann ggf. erneut und suche nach Informationen, die explizit auf diesen Platzhalter folgen.

    Das ganze läuft in Schleifen, denn es kann mehrere Treffer in einem Text geben. Und hier stoße ich im wesentlichen auch auf mein Problem. Ich demonstriere das mal an einem Beispiel:
    Code:
    DECLARE   @text VARCHAR(8000)
    SET     @text = '
    Hallo Welt
    
    #01# hallo, welt, die ganze.
    #02# wusa, asdf, qwert, 1qqq.'
    
    IF     @text LIKE '%#[0-9][0-9]# %, %, %, %.%'
    BEGIN
       SELECT   left(@text,patindex('%#[0-9][0-9]# %, %, %, %.%',@text)-1) AS text_links,
           right(@text,datalength(@text)-patindex('%#[0-9][0-9]# %, %, %, %.%',@text)-3) AS text_rechts
    END
    Dieser Text beinhaltet bereits zwei Platzhalter an mir unbekannten stellen. Es folgen Informationen von unbestimmter Länge, in dem ersten Fall mit 3 Werten, im zweiten Fall mit 4 Werten die durch ein Komma getrennt werden und abschließend mit einem Punkt enden. Dahinter oder dazwischen kann alles stehen oder eben auch nicht.

    Wenn von dem LIKE die Existenz des Musters im Text erkannt wird suche ich mir mit patindex() den Einstiegspunkt und durchlaufe ihn dann bis zum Punkt. Und hier stoße ich auch auf mein Problem:
    Ich muss mit % arbeiten weil mein Text eine unbekannte Länge hat. Wenn ich mit % arbeite, kann da aber eben auch ein Zeichen wie ein Punkt oder eine Raute drin stehen, das ist SQL egal. Genau das passiert hier. Mein Pattern beginnt hinter #01#, endet aber erst am Punkt hinter #02#.

    Kennt jemand einen Weg, Zeichen in beliebiger Menge zu erlauben aber bestimmte Zeichen davon auszuschließen? Ich habe mir schon regular expressions angesehen aber bin neu auf dem Gebiet und behersche kein .NET. Am liebsten würde ich auf reguläre Ausdrücke verzichten da mein Script bisher nur in diesem einen Fall hakt.
     
  2. Hony%

    Hony% Datenbank-Guru

Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden