Announcement

Collapse
No announcement yet.

Datensätze abfragen, in denen varchar in int umgewandelt werden kann

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

  • Datensätze abfragen, in denen varchar in int umgewandelt werden kann

    Hi zusammen

    Habe folgendes Problem:
    Ich habe eine Tabelle FIRMEN mit FIRMENNR varchar(20), FIRMENNAME varchar(250)
    Bisher war es so, dass die FIRMENNR manuell vergeben werden konnte/sollte.
    Nun soll jedoch ein Vorschlag für die Firmennummer automatisch vergeben werden.
    Und das am besten in Form einer fortlaufenden Zahl.
    Die Tabelle kann beispielsweise so gefüllt sein:

    FIRMENNR FIRMENNAME
    1 Firma 1
    NFR Firma 2
    2 Firma 3
    3d Firma 4
    Beim Anlegen einer neuen Firma soll nun als FIRMENNR die 3 vorgschlagen werden, da das die nächste laufende Zahl wäre.

    Gibt es eine Möglichkeit nur die Firmen aus der Tabellen auszulesen, deren FIRMENNR in eine Zahl umgewandelt werden können? Wenn ja, wie geht das?
    Derzeit wird Oracle verwendet. Am besten wäre zusätzlich auch eine Lösung für PostgreSQL. Vorranging geht es aber um Oracle.

  • #2
    http://stackoverflow.com/questions/5...tion-in-oracle

    Comment


    • #3
      Es gibt m.E. keine schöne Möglichkeit, in Oracle auf numerische Inhalte eines Textfeldes zu prüfen.
      Wären die Einträge nicht gemischt(Zahlen und Buchstaben) würde ggF. eine geschickte Sortierung ausreichen.

      Ich schlage eine Stored Funktion vor, die auf numerischen Inhalt prüft und einen entsprechenden Wert zurückliefert. Hier kann man entweder den Text parsen- muss aber NLS Settings für Zeichen berücksichtigen, sofern auch Float und negative Zahlen verarbeitet werden sollen- oder man macht es mit Gewalt, also stumpf in Zahl umwandeln und den Fehlerfall abfangen.

      Damit baust Du dann ein select, das mit Hilfe dieser Funktion alle Zahlwerte filtert, zu Zahl konvertiert und das Maximum davon ausgibt.

      P.S.: google liefert z.B. soetwas:
      Code:
      LENGTH(TRIM(TRANSLATE(string1, ' +-.0123456789', ' ')))
      http://www.techonthenet.com/oracle/q.../isnumeric.php

      Davon gibt es sicher dutzende Varianten. Problem ist, das es lediglich die Einzelzeichen des Stringparameters prüft und das Ergebnis nichts über die tatsächliche Konvertierbarkeit sagt. Im Fließkommabereich würde man hierzulande z.B. auch das Komma als gültiges Zeichen aufnehmen.
      Der Ausdruck berücksichtigt aber weder Anzahl noch Reihenfolge.
      Wie gesagt, wenn Deine Daten lediglich positive Ganzahlen sind, kommt man mit dem Verfahren schon hin, ansonsten RegExp. Da weiß ich aber nicht wie es bei PostGreSQL aussieht.
      Zuletzt editiert von defo; 12.11.2012, 11:41.
      Gruß, defo

      Comment


      • #4
        Danke. Das mit dem Translate funktioniert für meine Zwecke ausreichend gut.
        Da die Funktion vom Benutzer manuell über einen Button ausgelöst wird, ist die Perfmance auch in Ordnung. Den neuen Vorschlag kann ich dann so ermitteln:
        [HIGHLIGHT=SQL]select (max(FIRMENNR) + 1) as NEWFIRMENNR from FIRMA where LENGTH(TRIM(TRANSLATE(FIRMENNR, ' +-.0123456789', ' '))) is null[/HIGHLIGHT]

        Comment

        Working...
        X