Frage

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>

Es fällt mir schwer, die Nuancen von Oracle SQL zu verstehen. Schauen Sie sich zum Beispiel die beiden obigen Abfragen an.

Warum scheitert die erste Abfrage, aber der zweite Erfolg?

War es hilfreich?

Lösung

Laut dem Dokumentation, Der erste Wert für eine to_number muss sein

Ein Binary_Double -Wert oder ein Wert von char, varchar2, nchar oder nvarchar2 Datentyp, der eine Nummer im Format enthält, das vom optionalen Formatmodell angegeben wurde

Daher wandelt Oracle implizit 123,56 in einen Zeichenwert um. Das Problem kommt dann, dass das Format für die to_number nicht mit dem angegebenen Wert übereinstimmt. Dies ist zu sehen, da Sie für die folgenden zwei Variationen den gleichen Fehler erhalten:

select to_number(to_char(123.56),'999.9') from dual;

select to_number('123.56','999.9') from dual;

Aber Sie tun dies nicht:

select to_number(123.56,'999.99') from dual;

Beim Konvertieren von Zeichen in Zahlen muss die Formatspezifikation genau übereinstimmen. Wenn Sie jedoch Zahlen in Zeichen konvertieren, kann die Nummer mit dem Formatspezifizierer selektiv extrahiert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top