• ベストアンサー

DB2でのシステム日付のinsert、updateについて。

質問です。 DB2で、システム日付のinsert、updateを行うSQLを作成したいのですが、どのようにしたら良いでしょうか? また、参考になるようなサイトなどありましたら教えてください。 どなたか宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ishi00
  • ベストアンサー率83% (10/12)
回答No.6

そうですか・・・。 DB2V8 FP2 on WinXPProのCLPではうまくいっていますが・・・。 (成功例) db2 connect to sample db2 create table hoge(no integer,date date) db2 insert into hoge values (1,current date) db2 update hoge set date=current date where no=1 ちなみに db2 update hoge set date=current date where no='1' ⇒SQL0401N(SQLSTATE=42818)エラー db2 update hoge set date=integer(current date) where no=1 ⇒SQL0408N(SQLSTATE=42821)エラー でした。 no列はINTEGER型で間違いないんですよね? 以下はどういうエラーになりますか? db2 update hoge set date=current date

asamn777
質問者

お礼

成功例と同じく、テーブルをCREATEしてから行った場合に正常に実行されました。 今までなぜできなかったのか疑問ですが・・・。 お手数おかけして申し訳ありません。 ありがとうございました!!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • ishi00
  • ベストアンサー率83% (10/12)
回答No.5

そうですか・・・。 そうすると current date が正しく取得できていないかも知れません。(そんなことは聞いたことが無いですが・・・。) 次のコマンドの結果はどうなりますか? values current date あと、DB2のバージョン(db2level)、OSは何ですか? あと、環境はCLP(コマンドライン)ですか?アプリケーションですか?

asamn777
質問者

補足

values current dateでは、日付が正常に取得できます。 DB2バージョン:v7.1.0.43 OS:windows2000 環境はコマンドラインです。 ちなみに、INSERTの場合は正常に実行されるのですが、何か関係があるのでしょうか? よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • ishi00
  • ベストアンサー率83% (10/12)
回答No.4

no 列は 何型ですか?

asamn777
質問者

補足

no列はINTEGERです。

全文を見る
すると、全ての回答が全文表示されます。
  • ishi00
  • ベストアンサー率83% (10/12)
回答No.3

no列 か date列 の型が違うのだと思います。 こういうときは describe table tablename の結果を確認しましょう。 あとエラーコードも明記したほうが良いと思います。

asamn777
質問者

補足

列のデータ型を調べてみたところ、 date列はDATE型でした。 current dateで得られる日付は、DATE型ではないのですか? ちなみに先ほどのエラーコードは、SQLSTATE=42818です。

全文を見る
すると、全ての回答が全文表示されます。
  • ishi00
  • ベストアンサー率83% (10/12)
回答No.2

はい。

asamn777
質問者

補足

UPDATE tablename SET date = current date WHERE no = 1 上記SQLのdate列はDATE型なのですが、実行すると、 「演算 "=" のオペランドのデータ・タイプが一致していません。」 とエラーになってしまいます。 これは、DATE列とcurrent dateのデータ型が異なるからでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • ishi00
  • ベストアンサー率83% (10/12)
回答No.1

current date を使うと良いです。

asamn777
質問者

補足

ありがとうございます。 ちなみに、使い方としては、 UPDATE tablename SET date = current date WHERE no = 1 でよろしいのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • [ADO.NET]Accessの日付型にデータをInsertするには?

    言語はVB.NETでDBはAccess2003、OleDbで接続をしています。 テーブルに日付型のフィールドがあるのですが、 SQL文でInsertしようとすると、 System.Data.OleDb.OleDbException: 更新可能なクエリであることが必要です。 という例外がスローされます。 SQL文としては、 INSERT INTO TEST_TABLE (name,updatetime) VALUES ('テスト',DateValue('2006/12/11 18:00:00')); というような構文になっています。 初歩的な不明点ですが、ご教授お願いします。

  • 「システム日付」を挿入する

    フィールドに「システム日付」を挿入するSQLを作成する方法が分かりません。 GETDATE()という関数を使えばいいらしいですが、どのようにすれば良いでしょうか? INSERT文を使ってdatetime型の値が入る列に挿入するという形式です。

  • DB2 SQL 日付の計算について

    DB2のSQLについての質問があります。 現在日付+3年後の3月31日を計算、setしてupdateしたいのです。 方法を教えてください。 お願いします。

  • PEAR DBのupdateについて

    PEAR DBにて複数のデータを一度にUPDATEにて更新しようと思っているのですが、うまくいきません。 foreach($data as $value){   $SQL = "update `table_name` set `id` = '" .addslashes($value). "';"; } $res = $this->db->query($SQL); まず、update分をデータ分foreachにて溜め込み、一気にクエリを投げております。insert文の場合はうまく処理してくれるのですが、updateの場合はエラーが返ってきてしまい、処理してくれません。updateの場合、PEAR DBでは不可能なのでしょうか? お分かりになる方、ご教授ください。よろしくお願いいたします。

    • 締切済み
    • PHP
  • DB2でselectは出来るが、updateなどが出来ない

    ご覧頂き、有難うございます。 strutsを使って、Webアプリを作成しています。 DBはDB2を使ってまして、タイトルの通り 画面を使って、検索は出来るのですが 更新系(update,delete,insert)が出来なくなってしまいました。 エラーは SQL1822N 予期しないエラー・コード "-290" をデータ・ソース "LINK_CRP_JDE" から受け取りました。 関連したテキストとトークンは "func="SQLExecute" msg=" SQL0290N 表スペース・" です。SQLSTATE=560BD と出ています。 何かご存知ある方、回答御願いします。

  • PHPシステムでSQLのUPDATEがあればINSERTはいらないと思うのですけど?

    PHP4ベースの勤怠管理システムみたいなものに、 各支社が自身のアクセスIDとパスでアクセスし、 日々、いろいろデータを登録しています。 この既存システムを流用し、各支社がログイン後、トップメニューに PHP4+MySQLベースのアンケートフォームを設け、回答をMySQLに 登録するような仕組みを考えているのですが、ここでごく基本的な 疑問があります。 アンケートは、 Q1がチェックボックス→「q1」 varchar(1) Q2がラジオボタン→「q2」 varchar(1) Q3がテキストのフリーワード→「q3」 varchar(50) のようになって、現状全てNULLなわけですが、 SQL部分はUPDATE文で作成するものでしょうか。 最初はINSERTで、二回目以降表示したとき(回答を変更修正したい時) は、登録されているものを各フォームに復元しつつ、 全てUPDATE文で上書きというのが基本なのかと推測してますが、 NULLから回答値にUPDATEすれば、最初からUPDATE文しか用意しなくても よいと思うのですけど。 ひいては、INSERT文の存在意義がよくわからなくなってきています。 このケースでは、最初にアンケートを表示し、回答がなされたら INSERTでDBに登録、みたいにしなければだめなのですか?

    • ベストアンサー
    • PHP
  • JDBCでのinsertについて

    JDBCを使ってDBを扱います。 データベースはPostgresqlです。 Servlet+JSP+Beanで開発しているのですが、 以下のようなinsert処理をBeanで行っています。 String sql_insert = "INSERT INTO tal_ks(cd,kbn)" + " VALUES(" + vl1 + ",'" + vl2 + "')";System.out.println(sql_insert); System.out.println("SQL文発行"); int in = stmt.executeUpdate(sql_insert); System.out.println("(SQL文発行後"); ・ ・ ・ これを行うと、例外処理には流れず 実行したかのように見えるんですが、 実際はデータがはいっておりません。 このSQLと同じものをpsqlで直接実行すると insert できました。 これは、どういうことが原因なのでしょうか? 教えていただきたいです。

    • ベストアンサー
    • Java
  • Accessへ日付をINSERT

    今Access2000のテーブルから文字として受け取ったデータを 同じくAccessの別テーブルの日付型にINSERTしようとしています。 ソフトはVC6.0を使用しています。 受け取るSELECTはうまくできています。 UCHAR sqlstr [ ] ="INSERT INTO テーブル名"           "(カラム1、カラム2、カラム3)"           "VALUES(?,?,?)"; INSERTはこのようにSQL文を用意しておいてSQLExecuteで SQL文を実行しようとしています。 この場合にカラム1が日付型だとしたら、 「?」のパラメータには文字として渡し、 SQL文のなかで "VALUES(to_date(?,'YYYYMMDD'),?,?)"; とすればうまくいくと思ったのですができません。 いろいろサイトを見るとAccessでは「’」ではなく「#」を使うと 書いてあったので to_date(?,#YYYYMMDD#) とやったのですがエラーになってしまいます。 ちなみにパラメータとして渡す文字列は「20020413」という 8桁の普通の文字です。 どなたか知っている方いませんでしょうか? 他に方法があればそれでも構いません。 どうか教えてください。m(__)m どうしても先へ進めません…。

  • SQLの日付と、DBの日付項目に対する比較について

    よろしくお願いします。 以下のように、DBには年月日がCHARの8桁で格納されています。 20050125 20050126 20050127 20050128 20050130 20030201 20030202 この項目に対し、システム日付から過去一週間以内の 日付を取得したいのですが、文字型とSQLのDATE型の 比較はどのようにすればよろしいのでしょうか? よろしくお願いします。

  • Pear::DBで、インサートしたプライマリーキーを取得したい

    宜しくお願い致します $dbはPear::DBを使用するとして... $db = DB::connect($dsn); $sql = "insert into Hoge (name) values (\"Name\")"; $res = $db->query($sql); これでDBに一行追加されるわけですが このときに追加した行のプライマリーキーを取得したいと考えています 何かいい手はございますでしょうか?

    • ベストアンサー
    • PHP