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?