我正在使用Oracle 11g Schema
我想从连接它的日期中选择月份和日期并将其放入列中。
我在这里的语法是有道理的,但它抛出错误..
INSERT INTO OB_SELECT_LST12_SPG WED
VALUES (((TO_CHAR(TO_DATE('RET_DATE', MM))||( TO_CHAR(TO_DATE('RET_DATE', DD)));
“SQL错误:ORA-00907:缺少右括号”
非常感谢任何帮助。 感谢。
答案 0 :(得分:2)
首先要点......
ret_date
是列,请不要将其封装在引号('
)中,因为您无法将字符串'ret_date'
转换为日期。但是,假设ret_date
是一个看起来像13-06-2012
insert into ob_select_lst12_spg_wed (my_column)
values(to_char(to_date(:ret_date,'dd-mm-yyyy'),'mmdd'));
如果ret_date
是日期数据类型,则可以删除内部转换。
insert into ob_select_lst12_spg_wed (my_column)
values(to_char(:ret_date,'mmdd'));
to_char
和to_date
都使用datetime format models,其中包含多个选项。
请不要这样做。 始终将日期存储为日期
从您的评论中ret_date
是一个日期,而wed
列是一个字符。您没有声明错误绑定变量,因为您没有指定变量。我将假设ret_date
在另一个表中,因为它是一个日期,在这种情况下丢失值key-word并直接从该表插入:
insert into ob_select_lst12_spg (wed)
select to_char(ret_date,'mmdd')
from the_other_table
虽然这不是必需的,但您始终可以将日期转换为数据库中 exit 所需的任何内容。如果你没有将它作为日期存储在数据库中,那么很容易出现错误和不正确的值。我个人会将列wed
更改为日期,在这种情况下您的查询变得非常简单:
insert into ob_select_list12_spg (wed)
select ret_date
from the_other_table
从数据库中选择时,您可以根据需要使用正确的datetime format model。
答案 1 :(得分:0)
您缺少额外的括号。已打开(
的数量为8,关闭的)
为5
INSERT INTO OB_SELECT_LST12_SPG(WED)
VALUES ((TO_CHAR(TO_DATE(RET_DATE, MM)))||( TO_CHAR(TO_DATE(RET_DATE, DD))));
<强>更新强> 确保不需要其他列(即允许NULL)
答案 2 :(得分:0)
从日期列获取日期,月份的示例查询:
Select ((To_Char(to_date('01-FEB-73','dd-mon-yy'), 'MM'))
||( To_Char(to_date('01-JAN-73','dd-mon-yy'), 'dd')))
from dual;
如果RET_DATE是日期数据类型,则使用
insert into table_name (columname)
Select ((To_Char(RET_DATE, 'MM'))
||( To_Char(RET_DATE, 'dd')))
from dual;