Announcement

Collapse
No announcement yet.

Schwierige SQL-Abfrage in Oracle 8.x

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

  • Schwierige SQL-Abfrage in Oracle 8.x

    Hallo leute,

    betrete bei sql neuland und habe folgendes problem!

    habe in einer tabelle die spalte seriennummer die als
    char2 deklariert ist.

    wie kann ich jetzt per sql-statement herausbekommen, welche einträge mehr als 6 Ziffern haben. leider sind die
    einträge auch alphanummerisch angelegt.
    zum beispiel:

    a123456 / hh123456
    b1234567 / ha123456

    so müsste ich den datensatz b1234567 / ha123456 herausbekommen aber nicht den ersten. es gibt aber auch einträge vom typ
    233344
    7777777

    bzw. jd 111111 / hj 222222
    aber auch
    gg 123456 / uu 2222222

    weiss jemand eine lösung ??? Danke!!!

  • #2
    Hallo Dummbatz,

    auf anhieb faellt mir da kein SQL-Statement ein, mit dem das geht. Fuerchte, du wirst eine SQL-Prozedur schreiben muessen, die du dann auf jede Nummer anwendest.

    Sollte so etwa das folgende Aussehen haben (also jetzt nur pseudo-code)

    OPEN CURSOR ueber alle Sereiennummern.

    For jeder Satz im Cursor

    WHILE seriennummer noch nicht zu ende

    pruefe ob zeichen i der seriennummer im ASCII-Bereich der Ziffern liegt (ascii())
    Wenn nicht
    naechstes zeichen
    wenn doch
    stringlaenge von diesem Zeichen ab berechnen
    end while
    END CURSOR

    Das setzt voraus, dass die Buchstaben nur am Anfang einer Nummer kommen und nicht mittendrin.
    Wenn du diese Art von Abfrage öfter machen musst, wuerde ich empfehlen die Tabelle um zwei Spalten zu erweitern und in einer Spalte den Buchstabenanteil der SerNummer zu speichern und in der anderen den Ziffernteil. dann hat man es beim Zugriff etwas flotter.

    Sorry wegen des Pseudocode, aber ich habe gerade keinen zugriff auf die Datenbank, sonst haette ich es syntaktisch korrekter hingekriegt.

    Gruss

    Stefa

    Comment


    • #3
      Hallo,

      bei Oracle (auf jeden Fall 8i) kannst Du es mal so probieren:

      select * from tabelle where translate(seriennummer, '1234567890', '0000000000') like '%0000000%';

      damit bekommst Du alle Sätze, bei denen mindestens 7 Ziffern am Stück irgendwo in der Spalte stehen.

      Gruß
      Usch

      Comment

      Working...
      X