Announcement

Collapse
No announcement yet.

substr Erweiterung?

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

  • substr Erweiterung?

    Hallo zusammen,

    ich habe folgendes Problem:
    Aus einem String möchte ich einen bestimmten Teil herausziehen.

    Bsp: "/bla/ordner/nochnordner/blub FE10Z bla 1 cont"

    In einer Tabelle sind in einer Spalte mehrere dieser Strings abgelegt. Ich möchte diese in einem Cursor verarbeiten und NUR den Teil "FE10Z" aus dem String haben.
    Ein hardcodet substr, also
    Code:
    substr(spalte, 30, 5)
    wird nicht funktionieren, da die Pfade unterschiedlich lang sind.

    Gibt es die Möglichkeit zu bestimmen, dass der String nach dem ersten Leerzeichen durchsucht wird (also vor dem "FE10Z") und dem zweiten Leerzeichen? Dann hätte ich meinen benötigten Teil des Strings...Das trifft nämlich auf alle Strings in der Spalte zu.

    Danke im Voraus.
    Gruß Iloivar
    Gruß
    Iloivar

  • #2
    Code:
    INSTR
    Syntax
    
    INSTR(char1, char2, [, n [, m ]])
    oder
    Code:
    REGEXP_INSTR
    
    REGEXP_INSTR (source_char, pattern
                  [, position
                     [, occurrence
                        [, return_option
                           [, match_parameter ]
                        ]
                     ]
                  ]
                 )
    oder
    Code:
    REGEXP_SUBSTR
    
    REGEXP_SUBSTR(source_char, pattern
                  [, position
                     [, occurrence
                        [, match_parameter ]
                     ]
                  ]
                 )
    Gruß, defo

    Comment


    • #3
      Danke für die Antwort!

      Ich habe es jetzt so gelöst:

      Code:
       LTRIM(SUBSTR(spalte,INSTR(spalte,' ')+1,INSTR(SUBSTR(spalte,INSTR(spalte,' ')+1,LENGTH(TRIM(spalte))),' ')-1))
      Gruß Iloivar
      Gruß
      Iloivar

      Comment


      • #4
        Geht auch kürzer:

        Code:
          
        REGEXP_REPLACE(spalte, '^.+? (.+?) .+', '\1')
        
        oder
        
        TRIM(REGEXP_SUBSTR(spalte, ' (.+?) '))

        Comment


        • #5
          Dankeschön für eure Mühen

          Ich hätte bezüglich dieser Aufgabe noch ein weiteres Anliegen.

          In der Spalte mit dem Pfad ("/bla/ordner/nochnordner/blub FE10Z bla 1 cont") gibt es noch verschiedene Endungen nach dem FE10Z. Entweder da steht "bla 1 cont" oder "delete obsolete".
          Ich habe also 2 Cursor erstellt. Einer gibt die Tabelle mit den Endungen "bla 1 cont" aus und der andere "delete obsolete". Als Beispiel füge ich Auszüge aus meinem Programmcode hier ein:

          Code:
           
          LOOP
          FETCH c_jobs INTO r_jobs;
          EXIT WHEN c_jobs%NOTFOUND;
          
            IF c_delete%ISOPEN THEN
                CLOSE c_delete;
            END IF;
            
          OPEN c_delete;
          
              LOOP
              FETCH c_delete INTO r_delete;
              EXIT WHEN c_delete%NOTFOUND;
              
              IF r_jobs.command = r_delete.command 
                THEN DBMS_OUTPUT.PUT_LINE('Gefunden: ' || r_delete.jobid);
              END IF;
          
              END LOOP;
          
          END LOOP;
          Ich durchlaufe also mit dem jobs-Cursor die Spalte im delete-Cursor. Ist der command-String gleich, wird "gefunden" ausgegeben. Ich möchte jedoch genau das Gegenteil erreichen! Ich möchte also Bescheid wissen, ob zu einer job-Spalte KEINE passende delete-Spalte vorhanden ist. Setze ich in der IF-Abfrage ein ungleich ein, bekomme ich logischerweise sehr viele Datensätze, da ich alle ungleichen ausgegeben bekomme. (Ich will ja nur die, die wirklich nicht vorhanden sind...)

          Ich suche etwas wie: Wenn keinen zugehörigen Satz gefunden, dann bitte diesen Ausgeben. (%NOTFOUND oder so?)
          Ich hoffe ich habe es verständlich formuliert.

          Gruß
          der verzweifelte Iloivar
          Gruß
          Iloivar

          Comment


          • #6
            Hat sich erledigt!
            Habe es mit einer Unterabfrage mit einem NOT IN gelöst!

            Danke nochmal an alle

            Gruß
            der fröhliche Iloivar
            Gruß
            Iloivar

            Comment


            • #7
              Hallo,
              Originally posted by Iloivar View Post
              ...Habe es mit einer Unterabfrage mit einem NOT IN gelöst!
              NOT IN hat Tücken, die dir hoffentlich bewusst sind!?
              Falls nicht, siehe hier: Was ist der Unterschied zwischen IN und EXISTS?
              Ggfs. wäre also ein Konstrukt mit NOT EXISTS besser!

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Ups, nein das war mir nicht klar

                Wobei das in meinem Fall nicht relevant ist, da die benötigten Spalten in der Tabelle nicht NULL sein dürfen
                Aber trotzdem Danke! Wieder was dazu gelernt. Und btw: Coole Seite und gute Erklärungen! Weiter so!

                Gruß
                Iloivar
                Gruß
                Iloivar

                Comment

                Working...
                X