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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top