Announcement

Collapse
No announcement yet.

Feld nach diversen Zeichenfolgen durchsuchen

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

  • Feld nach diversen Zeichenfolgen durchsuchen

    Hallo,

    ich habe folgendes Problem:

    In unsere MS-SQL Datenbank werden in einem varchar(255) Textfeld diverse Buchungsnummern eingetragen. Da es sich um in Textfeld handelt, lassen sich keine eindeutigen Formateingaben definieren, d.h. die Daten sind in den unterschiedlichsten Formen eingegeben worden.
    Hier ein Beispiele:

    1234567, FLD#2345678, Nr.3456789,4567890, SPR 1122334 4455667(FLD);5566778

    Also im Klartext, ein heilloses Durcheinander.
    Das einzige Identifizierungskennzeichen für eine gültige Buchungsnummer ist: Es handelt sich um eine 7-stellige Integer Zahl.

    Die Tabelle, in der die Buchungsnummern aufgeführt sind, enthält auch ein eindeutiges Schlüsselfeld (IdentNr).
    Beispiel: IdentNr (Integer), Buchungsnummer (Varchar(255))

    Ich benötige ein SQL-Script, welches mir für jeden Datensatz der Tabelle jedes einzelne Feld Buchungsnummer vom ersten bis zum letzten Zeichen nach gültigen Buchungsnummern (7-stellige Int. Zahl) durchsucht, diese dann auch einzeln mit der IdentNr. zusammen ausgibt.
    Beispiel: IdentNr; Buchungsnummer 1..n

    Angenommen die IdentNr des Beispieldatensatzes = ´4711´
    und das Feld Buchungsnummer = ´1234567, FLD#2345678, Nr.3456789,4567890, SPR 1122334 4455667;5566778´

    Das Ergebnis sollte dann so aussehen:
    4711; 1234567; 2345678; 3456789; 4567890; 1122334; 4455667; 5566778

    Kann mir da jemand eine Lösung präsentieren. Ich hatte es mal mit einer Schleife versucht, aber nicht hinbekommen.
    Vielen Dank.

  • #2
    Originally posted by HPeters View Post
    Kann mir da jemand eine Lösung präsentieren. Ich hatte es mal mit einer Schleife versucht, aber nicht hinbekommen.
    Vielen Dank.
    Präsentieren? Du meintest sicher anfertigen!

    Eine schleife ist bestimmt nicht schlecht, was hast Du damit für Probleme gehabt?

    Nur mal so nebenbei: Wir rechnen Import von Freitexteingaben immer stundenweise ab.
    Gruß, defo

    Comment


    • #3
      1. Ich habe zwei Variablen angelegt

      declare @Textfeld VARCHAR (255)
      declare @Zaehler INT

      set @Zaehler =0
      set @Textfeld =''

      2. Nun habe ich im ersten Schritt mal versucht eine Schleife hin zu bekommen, die mir aus bestimmten Datensätzen jeweils die Buchungsnummer (bestellkommissio) vom ersten bis zum letzten Zeichen Zeichen für Zeichen ausliest.
      Da fing der Ärger schon an.
      Das habe ich schon nicht hinbekommen.

      Hier mein kläglicher Versuch:

      while @zaehler< (select max(len(bestellkommissio)) from proind where IdentNr > 49000)
      begin
      set @zaehler = @zaehler+1

      select IdentNr
      , bestellkommissio -- Kontrollausgabe
      , len(bestellkommissio) as laenge -- Kontrollausgabe
      , @zaehler as 'ZÄHLER' -- Kontrollausgabe
      , @Textfeld=@Textfeld + @Zaehler

      from proind
      where IdentNr='49055' or IdentNr ='50801' -- Zwei Muster
      end

      Comment


      • #4
        Wo hast Du denn das "angelegt"?
        Praktisch wäre eine Funktion zu definieren, die als Parameter den Feldinhalt bekommt, auf dem die Schleife dann ihr Unwesen treiben kann.

        Wenn Du die Variable für Zähler und Rückgabewert verwendest, macht es kaum Sinn, diese über 2 Datensätze laufen zu lassen oder?

        Also mach aus den Bruchstücken eine Funktion, die nur den Feldwert als Eingangsparameter bekommt und als Result den bereinigten Feldwert zurückliefert.
        Gruß, defo

        Comment


        • #5
          Hallo defo,
          natürlich macht es keinen Sinn, das nur mit 2 Datensäzten zu tun. Es sind ja auch einige tausend. Aber um Tests durchzuführen, habe ich das auf 2 einzelne beschränkt.

          Tja, ich würde ja gerne eine Funktion schreiben, wenn ich das hinbekommen würde. Bin da leider total unerfahren (sieht man ja an meinem Versuch mit der Schleife)

          Comment


          • #6
            Originally posted by HPeters View Post
            natürlich macht es keinen Sinn, das nur mit 2 Datensäzten zu tun. Es sind ja auch einige tausend. Aber um Tests durchzuführen, habe ich das auf 2 einzelne beschränkt.
            Tja, ich würde ja gerne eine Funktion schreiben, wenn ich das hinbekommen würde. Bin da leider total unerfahren (sieht man ja an meinem Versuch mit der Schleife)
            Eine Beschränkung auf 2 macht auch keinen Sinn, eine Beschränkung auf einen Satz, also einen Feldinhalt macht Sinn. Oder es müssen zwischendurch die Zähl und Merkvariablen zurückgesetzt werden.
            "ich würde ja gerne.." Aber Dir sind die Hände gebunden? Sicher nicht, wer oder was hindert Dich?
            Nimm Deine Fragmente, schau nach wie man eine Funktion schreibt (Rahmen) und steck die Fragmente dort hinein.
            Dann kann man weiter sehen.

            hier eine kleine Anleitung zur Funktionserstellung:
            http://lmgtfy.com/?q=+mssql+create+function
            Gruß, defo

            Comment


            • #7
              Ich fasse nochmal zusammen:

              Ich möchte aus bestimmten Datensätzen einer Tabelle ein spezielles Feld Zeichen für Zeichen durchsuchen. Immer wenn in diesem Feld 7 aufeinanderfolgende Ziffern (0-9) gefunden werden, benötige ich die Ausgabe des Schlüsselfeldes und aller 7-stelligen Zahlen die in dem Datensatz gefunden wurden.

              Wie bereits beschrieben, es handelt sich bei den Suchfeld um eine 255 Zeichen langes Textfeld in dem die Zahlen wirr durcheinander stehen.
              Beispielsweise: "1234567, FLD#2345678, Nr.3456789,4567890, SPR 1122334 4455667(FLD);5566778"

              Deshalb hatte ich versucht, in einer Schleife, die vom ersten Zeichen des Textfeldes bis zum letzten Zeichen durchläuft und irgendwie die 7 stelligen Zahlen sammelt. Außen herum sollte dann noch eine Schleife laufen, die dann die entsprechenden Datensätze selektiert, in denen nach den 7-stelligen Zahlen durchsucht werden soll.

              Hast Du denn noch eine Idee für mich wir ich das Problem löse? Auch der Tip mit der Funktion bringt mich nicht richtig weiter.

              Comment


              • #8
                Originally posted by HPeters View Post
                Hast Du denn noch eine Idee für mich wir ich das Problem löse? Auch der Tip mit der Funktion bringt mich nicht richtig weiter.
                Ja natürlich, sonst würde ich hier gar nicht schreiben. Ich wundere mit wieviel Kondition Du Dich weigerst, selbst Deinen begonnen Versuche zu Ende zu bringen.
                Der Link den ich geschickt habe, zeigt wie man eine Funktion baut.
                Eine Funktion, wie ich sie beschrieben habe ermöglicht Dir dann folgendes SQL aufzurufen:
                Code:
                Select Id, andereFelder, MeineFunktionDieDatenMatschAufräumt(MeinDatenMatschFeld) from MeinDatenmatsch;
                Die einzige Schleife die Du dafür in Deiner Funktion brauchst, hast Du bereits oben in Deinem Code begonnen.

                P.S: Und eine Funktion sieht so aus:
                Code:
                CREATE FUNCTION AlignNumbers ( @AlignMyNumbers VARCHAR(2000) )
                RETURNS VARCHAR(1000)
                AS BEGIN
                
                    <Deine Schleife hier einfügen>
                
                    RETURN @AlignedNumbers
                
                   END
                Wenn Du nicht weiterkommst, postest Du Deinen Funktionscode hier und man wird Dir sicher helfen.
                Gruß, defo

                Comment

                Working...
                X