MM/DD/YYYY
形式で保存されたテーブルに日付列があります。同じ日付を選択して、YYYY-MM-DD
形式、つまりXSD Date Formatの別のテーブルに保存する必要があります。しかし、私はそれを行うことができません。私はこのクエリを使用しています:
select to_date(date_column,'YYYY-MM-DD') from table;
しかし、それでもできません。私にエラーを与える
ORA-01843:有効な月ではありません
つかいます
select to_char(date_column,'YYYY-MM-DD') from table;
あなたはそれを間違った方法で持っているように聞こえます。 existingデータがMM/DD/YYYY形式の場合、次が必要です。
select to_date(date_column,'MM/DD/YYYY') from table;
既存のデータをDATE値に変換します。 (正直なところ、なぜ日付として保存されていないのだろう...)
1ステップで変換を実行する場合は、次のことが必要になる場合があります。
select to_char(to_date(date_column,'MM/DD/YYYY'), 'YYYY-MM-DD') from table;
つまり、行ごとにMM/DD/YYYY形式で解析し、YYYY-MM-DD形式に再フォーマットします。
(データをそもそもテキストとして保存するのではなく、「自然な」タイプのままにしておくことをお勧めします。)
here からダウンロードできるOracle SQL Developerを使用できると想定しています。
使用する日付形式を定義できます。
ALTER SESSION SET nls_date_format='yyyy-mm-dd';
これにより、次のようなクエリを実行できるようになりました。
SELECT * FROM emp_company WHERE JDate = '2014-02-25'
より具体的にしたい場合は、次のような日付形式を定義できます。
ALTER SESSION SET nls_date_format='yyyy-mm-dd hh24:mi:ss';
select to_date(to_char(ORDER_DATE,'YYYY/MM/DD'))
from ORDERS;
これは役立つかもしれませんが、最後に日付ではなく文字列を取得します。どうやら、フォーマットの問題は確実に解決されます。
DATE
列を別の形式に変換するには、目的の形式でTO_CHAR()
を使用し、次にDATE
型に変換し直します。
SELECT TO_DATE(TO_CHAR(date_column, 'DD-MM-YYYY'), 'DD-MM-YYYY') from my_table
これは私のために働いた!日付または文字列を希望のデータ型に変換できます
to_char(TO_DATE(TO_CHAR(end_date),'MM-DD-YYYY'),'YYYY-MM-DD') AS end_date
コメントによると、データテーブルのデータ型はDATEです。したがって、単に「select date_column from table;」を使用する必要があります。
これで、selectを実行すると、.xsdに必要な日付データ型が返されます。
日付の文化依存の書式設定は、select-statementではなく、GUIで行う必要があります(ほとんどの言語には便利な方法があります)。
基本的に、Oracleの日付列のデータは、ユーザー定義の形式で保存するか、デフォルトとして保持できます。すべてNLSパラメーターに依存します。
現在の形式は次の方法で確認できます。SELECT SYSDATE FROM DUAL;
レコードを挿入しようとして、INSERTステートメントがこの形式ではない場合、ORA-01843:有効な月エラーではありません。したがって、最初に挿入ステートメントの前にデータベースの日付形式を変更し(挿入ステートメントのバルクロードがあると仮定しています)、挿入スクリプトを実行します。
フォーマットは次の方法で変更できます。ALTER SESSION SET nls_date_format = 'mm/dd/yyyy hh24:mi:ss';
また、SQL Developer GUIからNLS設定を変更できます([ツール]> [設定]> [データベース]> [NLS])
軍用時間のフォーマットの場合、
select TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mm:ss') from DUAL
--2018-07-10 15:07:15
日付を月、日、時間、分に切り捨てたい場合は、試してみてください
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
形式リテラルについては、 https://docs.Oracle.com/cd/B28359_01/server.111/b28286/functions242.htm#SQLRF52037 でヘルプを見つけることができます。
これは次の方法で簡単に実行できます。
select to_char(to_date(date_column, 'MM/DD/YYYY'), 'YYYY-MM-DD') from table