3 Stimmen

Gibt es in Informix 7.3 eine eingebaute Funktion zum Testen auf Alpha- oder numerische Daten?

Ich habe nach einer SQL-Funktion gesucht, die einen Wert daraufhin prüft, ob er ein Alphawert oder ein numerischer Wert ist. Für Informix 7.3 scheint es keine derartigen Funktionen zu geben, aber vielleicht habe ich etwas übersehen oder nach den falschen Dingen gesucht.

Ich versuche zum Beispiel, ein Telefonnummernfeld daraufhin zu testen, ob es nur Zahlen enthält, und es entsprechend zu behandeln:

Bei dieser Tabelle mit dem Feldtyp Telefon ist char(12) :

id      name        phone
5164      Cheese      973-153-5149
8843      Queso       (201)8011830
8356      Formaggio   2129182943
8938      Ost         ext.21438
3852      Ser         973-15-1549

Ich möchte etwas in dieser Art machen:

SELECT  CASE    WHEN    (ISALPHA((TRIM(REPLACE((REPLACE((REPLACE((REPLACE((REPLACE(phone,'-','')),'(','')),')','')),' ','')),'.','')))))
                THEN    'has alpha chars'
                WHEN    (LENGTH((TRIM(REPLACE((REPLACE((REPLACE((REPLACE((REPLACE(phone,'-','')),'(','')),')','')),' ','')),'.','')))) NOT IN (10,11))
                THEN    'wrong length'
                WHEN    (phone IN ('',' ',NULL)))
                THEN    'phone is blank'
                ELSE    (TRIM(REPLACE((REPLACE((REPLACE((REPLACE((REPLACE(phone,'-','')),'(','')),')','')),' ','')),'.','')))
        END     phone
FROM    given_table;

Im Grunde versuche ich, alle - , ( , ) , , . Zeichen aus der Telefonnummer, trimmen Sie das Ergebnis, testen Sie die Länge auf 10 oder 11 Zeichen und stellen Sie sicher, dass die Daten nach dem Ersetzen und Trimmen keine Alpha-Zeichen enthalten. (Wenn Sie der Meinung sind, dass irgendetwas an meiner Vorgehensweise beim Ersetzen und Trimmen falsch ist, bin ich auch für Vorschläge zu diesem Aspekt offen. Regex?)

Das Endergebnis, das ich mir wünschen würde, wäre:

phone
9731535149
2018011830
2129182943
has alpha chars
wrong length

Ich habe einen gelesen Lösung (Oracle), die die Verwendung einer Kombination aus LENGTH , TRIM und TRANSLATE sondern TRANSLATE wird für Informix 7.3 nicht unterstützt


*Bitte beachten Sie, dass ich meine eigene Funktion schreiben werde, wenn es keine gibt, also schlagen Sie das bitte nicht als Antwort vor. Ich möchte nur wissen, ob es irgendwelche eingebauten Möglichkeiten gibt, dies zu tun.

Jonathan Leffler als Retter?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X