Brug kraften Luke;)
SqlFiddleDemo
SELECT UPPER(TO_CHAR(TO_DATE(500,'J'),'Jsp')) || '/=' AS new_valueFROM dual;
Ledetråden er Dato
i stavet format.
EDIT:
Tilføjelse af understøttelse af negative tal
:
SqlFiddleDemo
MED cte AS( VÆLG 10 SOM NUM FRA dual UNION ALLE VÆLG -500 FRA dual UNION ALLE VÆLG 0 FRA dual)VÆLG num AS old_value, decode( tegn( num ), -1, 'NEGATIVE ', 0 , 'NUL', NULL ) || decode( sign( abs(num) ), +1, to_char( to_date( abs(num),'J'),'JSP') ) || '/=' AS new_valueFROM cte
EDIT 2:##
Tilføjelse af begrænset understøttelse af float:
SqlFiddleDemo3
MED cte AS( VÆLG 10 SOM NUM FRA dual UNION ALLE VÆLG -500 FRA dual UNION ALLE VÆLG 0 FRA dual UNION ALLE VÆLG 10.3 FRA dual UNION ALLE VÆLG -10.7 FRA dual)VÆLG num AS old_value, decode( tegn( tal ), -1, 'NEGATIV', 0, 'NUL', NULL ) || decode( sign( abs(num) ), +1, to_char( to_date( abs(TRUNC(num)),'J'),'JSP') ) || TILFÆLDE, NÅR INSTR (num, '.')> 0 SÅ PUNKT ' || TO_CHAR (TO_DATE (TO_NUMBER (SUBSTR(tal, INSTR (tal, '.') + 1)),'J'),'JSP') ELSE NULL END AS new_valueFROM cte
EDIT 3:
for 10.3 output er TEN POINT THREE, men det skal være TEN POINT TTRETI for 10.3 og TEN POINT THREE for 10.03. Hvordan kunne jeg opnå dette?
Afhængigt af hvor mange cifre du ønsker til identitet, kan den være RPADed
med 0:
MED cte AS( VÆLG 10.03 SOM NUM FRA dual UNION ALLE VÆLG 10.30 FRA dual UNION ALLE VÆLG 10.33 FRA dual) SELECT num AS old_value, decode( tegn( num ), -1, 'NEGATIVE ', 0, 'NUL', NULL ) || decode( sign( abs(num) ), +1, to_char( to_date( abs(TRUNC(num)),'J'),'JSP') ) || TILFÆLDE, NÅR INSTR (num, '.')> 0 SÅ PUNKT ' || TO_CHAR (TO_DATE (TO_NUMBER (RPAD(SUBSTR(tal, INSTR (tal, '.') + 1) ,2,'0') ),'J'),'JSP') ELSE NULL END AS new_valueFROM cte;
db<>fiddle-demo
Output:
+-------------+------------------------+| OLD_VALUE | NEW_VALUE |+-------------+------------------------+| 10.03 | TI POINT TRE || 10,3 | TI POINT TREDIVE || 10.33 | TI POINT 33 |+------------------+------------------------+