2017-12-31 145 views
0

Ich möchte eine einfache Datumsformatänderung vornehmen.SQL Datumsformat nicht ändern

Meine Abfrage sieht wie folgt aus:

select to_date('01-JAN-2018','dd-mm-yyyy') from dual. 

Dies ist Teil eines viel größeren Abfrage.

Dies wird geben Fehler wie unten auf meinem prod:

oracle.xdo.servlet.data.DataException: oracle.xdo.XDOException: java.sql.SQLDataException: ORA-01858: a non-numeric character was found where a numeric was expected 

Das exakt gleiche auf meinem offline Orakel fein arbeiten 10g

Antwort

3

nicht to_date() anwenden. Stattdessen verwenden Sie die date Stichwort:

select date '2018-01-01' 

Alternativ können Sie das richtige Format:

select to_date('01-JAN-2018', 'DD-MON-YYYY') 
from dual 
+0

Das Problem ist, dass mein Monat von Parametern kommt, und es ist immer ein 3 Buchstaben Monat wie 'JAN', 'FEB', ..... Und auch hier, wenn ich schreibe: Wählen Sie Datum '2018-JAN-01' aus Dual, gibt es Fehler, dass 'ungültiger Monat' –

+2

@Fumble Bit, es scheint, dass Sie nicht bemerkt haben, dass Gordon gesagt hat, dass Sie die ** korrekte ** Formatmaske verwenden sollten - wenn Ihre Daten JAN, FEB sind, dann verwenden Sie "MON". Wenn es 01, 02 ist, dann benutze "MM". – Littlefoot

1

Es gibt eine Diskrepanz mit der Formatierung mm und MON.

Verwenden

select to_date('01-JAN-2018','dd-MON-yyyy') from dual

oder

select to_date('01-01-2018','dd-mm-yyyy') from dual 

In Ihrem Oracle 10g db, sein nls_date_format muss dd-mm-yyyy (oder Varianten wie dd.mm.yyyy oder dd/mm/yyyy).

So ist es nicht egal von dd-mon-yyyy (dh implizit konvertiert dd-MON-yyyy zu dd-mm-yyyy)

+0

ja, aber ich habe nur eine Abfrage-Schnittstelle. Ich kann "nls_date_format" nicht ändern, indem ich "alter session" auf meinem Produkt verwende –

0

try this:

select to_date('01-01-2018','dd-mm-yyyy') from dual