0

date列もデータ型であるソース テーブルから値を選択して、データ型に値を挿入しようとしていますdate。どちらも同じ型であるため、関数を使用して変換を行わずに列を直接選択しましたto_dateが、次のエラーが発生しています。

SQL Error: ORA-00932: inconsistent datatypes: expected DATE got NUMBER
00932. 00000 -  "inconsistent datatypes: expected %s got %s"

二重にチェックしましたが、ソース列には null 値がありません。

insert into Target(Targetdate) 
  select to_date(Source.START_DATE,'yyyy-mm-dd')
    from Source

ご検討いただきありがとうございます。

4

3 に答える 3

2

日に切り捨てられた日付をターゲット テーブルに取得しようとしているとします。これは、次のようにして行うことができます。

insert into Target(Targetdate) select trunc(Source.START_DATE,'DD') from Source

編集

Dazzal は、これが TRUNC の 2 番目のパラメーターを省略した場合のデフォルトの操作であるため、これはさらに簡単であると述べています。

insert into Target(Targetdate) select trunc(Source.START_DATE) from Source

クエリの問題Source.START_DATEは、文字列ではなく日付でした...

EDIT2

特定の形式で日付文字列を取得したいようです-これは日付の種類とは関係なく、内部でどのように保存されているか-これを行うだけです:

SELECT to_char(START_DATE,'YYYY-MM-DD' from Source;
于 2013-01-03T15:37:26.117 に答える
1

「私のソース値の例は 11-JUN-13 で、YYYY-MM-DD のターゲット値が必要です。どうすればこれを達成できますか?」

すべての Oracle 日付は、同じ内部形式で格納されます。

SQL>  select dump(sysdate) from dual;

DUMP(SYSDATE)
---------------------------------------------
Typ=13 Len=8: 221,7,1,3,10,22,8,0

SQL>     

表示日は、クライアント環境のデフォルト値、または TO_CHAR() を使用している場合はフォーマット マスクに完全に依存します。

両方の列が DATE データ型である場合、複雑すぎます。INSERT で値をキャストする必要はありません。

insert into Target (Targetdate) 
select Source.START_DATE
from Source

から対象の日付を選択するときに、フォーマット マスクを適用するだけですTarget

于 2013-01-03T18:29:19.320 に答える
1

ソーステーブルから日付列を選択していると言いました。日付列の場合、なぜ再び日付に変換するのですか? もちろん、エラーも発生します..

insert into Target(Targetdate) 
select to_date(Source.START_DATE,'yyyy-mm-dd'), from Source

「to_date」関数の入力パラメータは「string」です

to_date( string1, [ format_mask ], [ nls_language ] )

更新1:

alter session set nls_date_format = 'yyyy-mm-dd';


insert into Target(Targetdate) 
select to_char(Source.START_DATE,'yyyy-mm-dd') from Source
于 2013-01-03T15:38:13.070 に答える