0

我试图date通过从列也是数据类型的源表中选择一个值来将一个值插入数据date类型。我直接选择了列,没有使用to_date函数进行任何转换,因为两者都是相同的类型,但我收到以下错误:

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

我加倍检查,源列没有空值。

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

感谢您查看这个。

4

3 回答 3

2

我假设您尝试将截断为当天的日期放入 Target 表中。这可以通过这样做来完成:

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

编辑

Dazzal 提到,由于这是将第二个参数留给 TRUNC 时的默认操作,所以这甚至更简单一点:

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

您的查询的问题是这Source.START_DATE是一个日期,而不是一个字符串......

编辑2

似乎您想要以特定格式获取日期字符串 - 这与日期类型以及内部存储的方式无关 - 只需执行以下操作

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 回答