Announcement

Collapse
No announcement yet.

String aus Feld mit Fließtext entnehmen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • String aus Feld mit Fließtext entnehmen

    Hallo

    Ich hab eine Tabelle in deren größere Texte stehen. Ich muss irgendwie in diesen Texten nach einer bestimmten Zeichenfolge plus 5 unbekannte Zeichen suchen und diese dann ausgeben...

    Ich habe werde eine Ahnung wie das geht, noch ob ads überhaupt möglich ist...

    bb MD

  • #2
    In welchem Datentyp sind diese Texte gespeichert, VARCHAR oder TEXT (oder doch nicht VARBINARY)? Und die Metazeichen '%' und '_' sind dir bekannt? Auch dazu die Zeichenfolgefunktionen CHARINDEX() und PATINDEX()? Hier mal ein paar Links zum Einlesen:
    CHARINDEX und PATINDEX
    Full Text Search
    Search and Replace in einem TEXT-Feld

    bye,
    Helmut

    Comment


    • #3
      so.. hab mal en bissl rumgewerkelt und hab folgen Code geschreiben
      Code:
      SELECT SUBSTRING(SUBSTRING(HtmlContent,PATINDEX('%ProdNum%',HtmlContent)+8,10),1
      		, PATINDEX('%"%',SUBSTRING(HtmlContent,PATINDEX('%ProdNum%',HtmlContent)+9,10)))
      FROM dbo.StaticContent
      WHERE HtmlContent like '%ProdNum%' AND PATINDEX('%ProdNum%',HtmlContent) >0
      Das funktionert soweit auch, allerdings nur, wenn 'ProdNum' einmal im Text vorkommt...

      Ich hätte aber alle 'ProdNum' im dem Text gefunden.. Nur bin ich da kläglich gescheitert.. hatte es mit einem Cursor versucht.. diese möglichkeit aber schnell wieder verworfen, da ich wirklich keine Ahnung habe, was ich jetzt machen soll

      Comment


      • #4
        Ich nehme an, du willst alle Vorkommnisse in einem String ausgeben. Da wird's komplex. Aber mach mal ein Beispiel, wo man ein paar Daten und Ergebnisse sieht, mir ist nämlich nicht klar, ob das dann in einer Zeile stehen soll oder je Vorkommen eine Ausgabezeile oder wie immer...

        bye,
        Helmut

        Comment


        • #5
          Die Tabelle, aus der ich die Daten brauche hat Spalten. Einmal die Spalte ContentID und einmal eine Spalte mit HtmlContent. Im der Spalte ContentID steht nur eine Zahl, und in der Spalte HtmlContent steht HTML-Code. Und diesen Code soll ich auf "ProdNum=" prüfen. Wenn "ProdNum" vorkommt, soll die danach Folgende ausgegeben werden. Das macht der Code von Gestern.

          Das Ergebnis sieht dann folgendermaßen aus:


          In der ersten Spalte steht dann nur die ID, in der 2. Spalte steht die ProdNum die ich schon gefunden hab, und in der 3. steht der Rest vom HTML Content (alles bis zur ersten vorkommenden ProdNum wurde abgeschnitten)... und aus diesem Rest, will ich, sofern ProdNum wieder vorkommt, diese wieder in einer Spalte ausgeben sowie den Rest vom HTMLContent.. und so weiter...

          Ich will halt den HTMLConten auf alle ProdNum prüfen und die dahinterstehende Nummer in einer Spalte ausgeben.

          Ich hoffe das ist so verständlich..

          Danke

          Comment


          • #6
            Nur um sicherzugehen - wenn im HtmlContent mit der ContentId 309 gesamt 3 mal "ProdNum=" vorkommen würde, würde das Ergebnis zB. so aussehen:



            Wenn das so ist, wird es wohl ohne UDF mit Resultset kaum gehen, deswegen frage ich vorher nochmal.

            bye,
            Helmut
            Attached Files

            Comment


            • #7
              Ja genau, so hab ich mir das vorgestellt...
              Aber ich bekomme das einfach nicht hin...

              Comment


              • #8
                Hmmm, mit einem einzigen Statement bringe ich das nicht hin, aber vielleicht hilft das ein bisschen weiter:

                Code:
                -- Hilfstabelle mit den Ergebniszeilen
                declare @gefunden table (
                  contID    int,
                  ProdNum      varchar(10),
                  htmlContent  varchar(8000)
                )
                
                -- weitere Hilfsvariable
                declare @id int, @pos int, @text varchar(8000)
                
                -- ein Cursor für die zeilenweise Verarbeitung
                declare cur1 cursor for
                  select contentID FROM dbo.StaticContent WHERE HtmlContent like '%ProdNum%'
                
                -- erste ID lesen
                open cur1
                fetch next from cur1 into @id
                
                -- solange es ID's gibt ...
                while @@fetch_status = 0 begin
                
                  -- erstes Vorkommen im String  und String selber einlesen
                  select @pos = Charindex('ProdNum',htmlContent),
                     @text = htmlContent from dbo.StaticContent where contentID = @id
                
                  -- solange ProdNum gefunden wird ...
                  while @pos > 0 begin
                    -- Eintrag der Daten in die Hilfstabelle
                    insert into @gefunden
                      select @id, SUBSTRING(@text, @pos + 8, 10), SUBSTRING(@text, @pos + 9, 9999)
                    -- kommt ProdNum im Rest nochmal vor?
                    set @pos = Charindex('ProdNum', @text, @pos + 1)
                  end  
                
                  -- nächste ID lesen
                  fetch next from cur1 into @id
                end
                
                -- fertig, Cursor schliessen
                close cur1
                deallocate cur1
                
                -- Ergebnis ausgeben
                select * from @gefunden
                Ich habe das jetzt aus Zeitgründen noch überhaupt nicht getestet, aber das Grundgerüst sollte im Groben passen, schaue mal, wie weit du damit was anfangen kannst, helfe dir dann gerne weiter.

                bye,
                Helmut

                Comment

                Working...
                X