2

我正在使用 Oracle 11g 架构

我想从日期中选择月份和日期,将其连接起来并将其放入一列中。

我在这里的语法是有道理的,但它抛出了一个错误..

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:缺少右括号”

任何帮助是极大的赞赏。谢谢。

4

3 回答 3

2

先说几点...

  1. 您的表名中有一个空格
  2. 您没有足够的列错误是由于您在表中有多个列
  3. 你真的不应该这样做
  4. 如果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两者都使用日期时间格式模型,它们有很多选项。


请不要这样做。始终将日期存储为日期


您的评论ret_date是一个日期,列wed是一个字符。您收到错误绑定变量未声明,因为您尚未指定变量。我将假设它ret_date在另一个表中,因为它是一个日期,在这种情况下会丢失 values 关键字并直接从该表中插入:

insert into ob_select_lst12_spg (wed)
select to_char(ret_date,'mmdd')
  from the_other_table

但这不应该是必需的,您始终可以在退出数据库时将日期转换为您想要的任何内容。如果您不将其作为日期存储在数据库中,那么很容易出现错误和不正确的值。我个人会将列更改wed为日期,在这种情况下,您的查询变得非常简单:

insert into ob_select_list12_spg (wed)
select ret_date
  from the_other_table

然后,在从数据库中进行选择时,您可以根据需要使用正确的日期时间格式模型

于 2012-06-13T21:30:28.097 回答
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;
于 2012-06-13T21:28:42.000 回答
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)

于 2012-06-13T21:19:24.920 回答