2016-08-19 9 views
0
SELECT decode(to_number(to_char(01-04-2016, 'mm')), 
     1, 
     to_number(to_char(01-04-2016, 'yyyy')) - 1, 
     2, 
     to_number(to_char(01-04-2016, 'yyyy')) - 1, 
     3, 
     to_number(to_char(01-04-2016, 'yyyy')) - 1, 
     to_number(to_char(01-04-2016, 'yyyy'))) FROM DUAL; 

Immer, wenn ich diese Anweisung ausführen, wird ein ungültiges Zahlenformatmodell angezeigt.Ungültiges Zahlenformat Modell

+0

'01-04-2016' isn't eine gültige Nummer. 'to_char' erwartet entweder ein' date' oder eine 'number'. und dieser Wert repräsentiert keines von beiden – SomeJavaGuy

+0

, aber ich habe bereits to_char (01042016, 'mm') gegeben, aber der gleiche Fehler zeigt –

+0

@NirmalyaRoykarmakar yeah, weil Sie versuchen, eine Zahl mit einem Datumsformat zu parsen, das nicht funktioniert. t arbeiten. – SomeJavaGuy

Antwort

0

Ihre Anfrage ist derzeit ungültig, wie to_char eine number oder date erwartet, aber die offene Zahl 01-04-2016 Passt nicht auf eine dieser darstellen.

Der Nachfolger erwähnte in Ihrem Kommentar to_char(01042016,'mm') nicht funktionieren entweder, wie die gegebene Zahl mit mm analysiert werden kann nicht, da es eine gültigen numberFormat und nicht ein dateFormat nicht erwarten, die mm isn't.

Damit Ihre Abfrage, wickeln Sie das reine Datum in eine to_date und erwähnen den aktuellen dateFormat durch die char gegeben arbeiten:

SELECT decode(to_number(to_char(to_date('01-04-2016', 'dd-mm-yyyy'), 'mm')), 
     1, 
     to_number(to_char(to_date('01-04-2016', 'dd-mm-yyyy'), 'yyyy')) - 1, 
     2, 
     to_number(to_char(to_date('01-04-2016', 'dd-mm-yyyy'), 'yyyy')) - 1, 
     3, 
     to_number(to_char(to_date('01-04-2016', 'dd-mm-yyyy'), 'yyyy')) - 1, 
     to_number(to_char(to_date('01-04-2016', 'dd-mm-yyyy'), 'yyyy'))) 
FROM DUAL; 
+0

Vielen Dank es funktioniert. –