identificatori di formato Oracle: to_number vs to_char
-
16-10-2019 - |
Domanda
SQL> select TO_NUMBER(123.56,'999.9') from dual;
select TO_NUMBER(123.56,'999.9') from dual
*
ERROR at line 1:
ORA-01722: invalid number
SQL> select TO_CHAR(123.56,'999.9') from dual;
TO_CHA
------
123.6
SQL>
Sto avendo un momento difficile nel capire le sfumature di Oracle SQL. Per esempio, dare un'occhiata a due interrogazioni di cui sopra.
Perché prima query fallire, ma secondo successo?
Soluzione
In base alla documentazione , il primo valore per un bisogno di essere to_number
un valore BINARY_DOUBLE o un valore di CHAR, VARCHAR2, NCHAR o NVARCHAR2 tipo di dati contenente un numero nel formato specificato modello di formato opzionale
Quindi Oracle è implicitamente la conversione 123.56 in un valore di carattere. Il problema viene quindi che il formato per la to_number non corrisponde al valore che è dato. Questo può essere visto perché si ottiene lo stesso errore per le seguenti due varianti:
select to_number(to_char(123.56),'999.9') from dual;
select to_number('123.56','999.9') from dual;
Ma non per questo:
select to_number(123.56,'999.99') from dual;
Durante la conversione di caratteri in numeri di specifica di formato deve corrispondere esattamente, ma quando conversione dei numeri in caratteri il numero può essere estratta selettivamente utilizzando l'identificatore di formato.