web-dev-qa-db-ja.com

PL / SQLで日付形式をMM / DD / YYYYからYYYY-MM-DDに変更する方法は?

MM/DD/YYYY形式で保存されたテーブルに日付列があります。同じ日付を選択して、YYYY-MM-DD形式、つまりXSD Date Formatの別のテーブルに保存する必要があります。しかし、私はそれを行うことができません。私はこのクエリを使用しています:

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

しかし、それでもできません。私にエラーを与える

ORA-01843:有効な月ではありません

17
user972548

つかいます

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

あなたはそれを間違った方法で持っているように聞こえます。 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形式に再フォーマットします。

(データをそもそもテキストとして保存するのではなく、「自然な」タイプのままにしておくことをお勧めします。)

14
Jon Skeet

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';
5
select to_date(to_char(ORDER_DATE,'YYYY/MM/DD')) 
from ORDERS;

これは役立つかもしれませんが、最後に日付ではなく文字列を取得します。どうやら、フォーマットの問題は確実に解決されます。

3
user9338150

DATE列を別の形式に変換するには、目的の形式でTO_CHAR()を使用し、次にDATE型に変換し直します。

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

これは私のために働いた!日付または文字列を希望のデータ型に変換できます

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で行う必要があります(ほとんどの言語には便利な方法があります)。

1
Johannes

基本的に、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])

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

1
supernova

軍用時間のフォーマットの場合、

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 でヘルプを見つけることができます。

1
Jenna Leaf

これは次の方法で簡単に実行できます。

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