Kann sein, dass es in einem großen Datenbankprodukt namens Oracle keine Methode isNumeric oder ähnliches gibt, die mir sagt, ob ein String eine Zahl repräsentiert? Es kann…
Deswegen hier eine kleine Methode:
CREATE OR REPLACE FUNCTION f_makeNumber(inval IN VARCHAR2) RETURN NUMBER IS rv NUMBER; numCharSet VARCHAR2(32); BEGIN SELECT VALUE INTO numCharSet FROM nls_session_parameters WHERE parameter = 'NLS_NUMERIC_CHARACTERS'; BEGIN SELECT DECODE( NVL(LENGTH(TRANSLATE(TRIM(inval),' +-.,0123456789',' ')),0), 0,TO_NUMBER( CASE WHEN VALUE = '.,' THEN REPLACE(inval, ',','.') WHEN VALUE = ',.' THEN REPLACE(inval, '.',',') END ), NULL ) INTO rv FROM nls_session_parameters WHERE parameter = 'NLS_NUMERIC_CHARACTERS'; EXCEPTION WHEN invalid_number THEN rv := NULL; END; RETURN rv; END f_makeNumber; / |
Diese Methode gibt den Zahlenwert des Strings ‘inval’ zurück, falls es sich um eine Zahl handelt, ansonsten null. NLS_NUMERIC Characters werden berücksichtigt (2.0 und 2,0 werden beides zu Zahlen), Strings wie 2.000,0 lassen sich damit allerdings nicht verarbeiten.
No comments yet
One Trackback/Pingback
Blogring für nvl+oracle…
Verwandte Blog-Einträge…
Post a Comment