我正在尝试通过从列表中列出值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
感谢您对此进行调查。
答案 0 :(得分:2)
我假设您尝试将日期截断到目标表中。这可以通过这样做来完成:
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
是日期,而不是字符串......
<强> EDIT2 强>
由于您似乎希望以特定格式获取日期字符串 - 其中没有与日期类型相关,以及如何在内部存储thigs - 只需执行此操作:
SELECT to_char(START_DATE,'YYYY-MM-DD' from Source;
答案 1 :(得分: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 ] )
UPDATE1:
alter session set nls_date_format = 'yyyy-mm-dd';
insert into Target(Targetdate)
select to_char(Source.START_DATE,'yyyy-mm-dd') from Source
答案 2 :(得分: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
选择目标日期时,您只需要应用格式模板。