it-swarm.com.de

Wie kann ich das Datumsformat von MM/TT/JJJJ in JJJJ-MM-TT in PL/SQL ändern?

Ich habe eine Datumsspalte in einer Tabelle im MM/DD/YYYY-Format. Ich muss das gleiche Datum in einer anderen Tabelle im YYYY-MM-DD-Format auswählen und speichern, d. H. Im XSD-Datumsformat. Aber ich kann es nicht. Ich verwende diese Abfrage:

select to_date(date_column,'YYYY-MM-DD') from table;

Aber ich kann es immer noch nicht. Gib mir einen Fehler 

ORA-01843: kein gültiger Monat

15
user972548

benutzen

select to_char(date_column,'YYYY-MM-DD') from table;
55
Yahia

Es klingt, als hätten Sie es falsch verstanden. Wenn Ihre vorhandenen Daten im MM/DD/YYYY-Format vorliegen, möchten Sie:

select to_date(date_column,'MM/DD/YYYY') from table;

um die vorhandenen Daten in DATE-Werte umzuwandeln. (Ich wundere mich, warum sie nicht als Datum gespeichert werden, um ehrlich zu sein ...)

Wenn Sie die Konvertierung in einem Schritt durchführen möchten, möchten Sie möglicherweise:

select to_char(to_date(date_column,'MM/DD/YYYY'), 'YYYY-MM-DD') from table;

Mit anderen Worten: Analysieren Sie die Zeilen für jede Zeile im Format MM/TT/JJJJ und formatieren Sie sie anschließend im Format JJJJ-MM-DD.

(Ich würde trotzdem immer noch versuchen zu versuchen, Daten in ihrem "natürlichen" Typ zu behalten, anstatt sie überhaupt als Text zu speichern.)

12
Jon Skeet

Ich gehe davon aus, dass Sie den Oracle SQL Developer verwenden können, den Sie von hier herunterladen können.

Sie können das Datumsformat definieren, mit dem Sie arbeiten möchten:

ALTER SESSION SET nls_date_format='yyyy-mm-dd';

Damit können Sie jetzt eine Abfrage wie folgt ausführen:

SELECT * FROM emp_company WHERE JDate = '2014-02-25'

Wenn Sie genauer sein möchten, können Sie das Datumsformat folgendermaßen definieren:

ALTER SESSION SET nls_date_format='yyyy-mm-dd hh24:mi:ss';
5
select to_date(to_char(ORDER_DATE,'YYYY/MM/DD')) 
from ORDERS;

Das kann helfen, aber am Ende erhalten Sie eine Zeichenfolge und nicht das Datum. Offenbar, Ihr Formatproblem wird sicher gelöst.

3
user9338150

Um eine DATE-Spalte in ein anderes Format zu konvertieren, verwenden Sie einfach TO_CHAR() mit dem gewünschten Format und konvertieren Sie es dann wieder in einen DATE-Typ:

SELECT TO_DATE(TO_CHAR(date_column, 'DD-MM-YYYY'), 'DD-MM-YYYY') from my_table
3
Phate01

Das hat für mich funktioniert! Sie können in einen Datentyp konvertieren, den Sie als Datum oder Zeichenfolge verwenden möchten

to_char(TO_DATE(TO_CHAR(end_date),'MM-DD-YYYY'),'YYYY-MM-DD') AS end_date

Laut den Kommentaren lautet der Datentyp in der Datentabelle DATE . Sie sollten also einfach Folgendes verwenden: "Date_column aus Tabelle auswählen"

Wenn Sie jetzt select auswählen, erhalten Sie einen Datums-Datentyp zurück, den Sie für die .xsd-Datei benötigen.

Die kulturabhängige Formatierung des Datums sollte in der grafischen Benutzeroberfläche erfolgen (die meisten Sprachen haben eine bequeme Möglichkeit), nicht in der select-Anweisung.

1
Johannes

Grundsätzlich können Daten in einer Datumsspalte in Oracle in einem beliebigen benutzerdefinierten Format gespeichert oder als Standard beibehalten werden .. __ Dies hängt alles vom NLS-Parameter ab.

Das aktuelle Format kann wie folgt aufgerufen werden: SELECT SYSDATE FROM DUAL; 

Wenn Sie versuchen, einen Datensatz einzufügen, und die Einfügeanweisung NICHT in DIESEM Format vorliegt, wird Folgendes ausgegeben: ORA-01843: Kein gültiger Monat Sie haben Masseneinfügung von Einfügeanweisungen) und führen dann das Einfügungsskript aus.

Das Format kann wie folgt geändert werden: ALTER SESSION SET nls_date_format = 'mm/tt/jjjj hh24: mi: ss'; 

Sie können die NLS-Einstellungen auch über die SQL Developer-Benutzeroberfläche ändern (Extras> Voreinstellung> Datenbank> NLS).

Ref: http://Oracle.ittoolbox.com/groups/technical-functional/Oracle-sql-l/how-to-view-current-date-format-1992815

1
supernova

Für militärische Zeitformatierung 

select TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mm:ss') from DUAL

--2018-07-10 15:07:15

Wenn Sie möchten, dass Ihr Datum auf Monat, Tag, Stunde, Minute gerundet wird, können Sie es versuchen

SELECT TO_CHAR( SYSDATE, 'yyyy-mm-dd hh24:mi:ss') "full-date" --2018-07-11 10:40:26
, TO_CHAR( TRUNC(SYSDATE, 'year'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-year"-- 2018-01-01 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'month'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-month" -- 2018-07-01 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'day'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-Sunday" -- 2018-07-08 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'dd'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-day" -- 2018-07-11 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'hh'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-hour" -- 2018-07-11 10:00:00
, TO_CHAR( TRUNC(SYSDATE, 'mi'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-minute" -- 2018-07-11 10:40:00
from DUAL

Für Formatliterale finden Sie Hilfe in https://docs.Oracle.com/cd/B28359_01/server.111/b28286/functions242.htm#SQLRF52037

1
Jenna Leaf

Sie können dies einfach tun, indem Sie:

select to_char(to_date(date_column, 'MM/DD/YYYY'), 'YYYY-MM-DD') from table
0
akanksha gupta