2

Oracle11gスキーマを使用しています

連結した日付から月日を選択して列に入れたい。

ここにある構文は理にかなっていますが、エラーが発生します。

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_charto_dateどちらも、いくつかのオプションがある日時形式モデルを利用します


ただし、これは行わないでください。常に日付を日付として保存する


あなたのコメントからret_dateは日付であり、列wedは文字です。変数を指定していないため、エラーバインド変数が宣言されていません。これは日付であるため、別のテーブルにあると想定しret_dateます。この場合、値のキーワードが失われ、そのテーブルから直接挿入されます。

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 に答える