- - PR -
Oracleで日付をキーにして抽出したい
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-09-23 17:02
お世話になっております。
Oracle9iを使用しています。 Date型の項目をキーにして抽出したレコードを削除したいと思っています。 sql = "DELETE FROM TABLE_A WHERE SINSEIBI=" & in_ymd [in_ymd]は当モジュールの実行時に引数として渡されます。 現在のテーブルの内容:11-9 -2004 12:00:00 AM 引数の値 :#9/11/2004# 実際に生成されたSQL文: "DELETE FROM TABLE_A TABLE_A.SINSEIBI = 2004/09/11" 結果、削除実行時にエラーになりました。 エラーメッセージは以下のとおりです。 --------------------------------------------------- コマンド処理中に 1 つ以上のエラーが発生しました。 ORA-00932: データ型が一致しません: DATEが予想され ましたがNUMBERです。 --------------------------------------------------- テーブルのデータ型はDATEになっています。 皆様、お忙しいところ申し訳ございませんが、 よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2004-09-23 17:12
文字どうりそのエラーでは、おそらくなんかの言語からそのSQLを発行して
in_ymd に値を設定して実行するわけですが、その引き渡すときに、その変数のタイプ の指定がおかしいのでは? | ||||||||||||||||
|
投稿日時: 2004-09-23 17:22
SQL*Plusなどで次のようにSQL文を流してみるとこうなります。
2004/09/11 の部分は 2004÷9÷11 という数値として扱われていますね。 SINSEIBIはDATE型ということなので、入力する日付を以下のようにDATE型に 変換してやるSQL文を生成するようにプログラムを直せば動くと思います。 "DALETE FROM TABLE_A WHERE TABLE_A.SINSEIBI = TO_DATE('2004/09/11', 'YYYY/MM/DD')" | ||||||||||||||||
|
投稿日時: 2004-09-23 17:39
七味唐辛子様、MechanicalLife様
早速のアドバイスありがとうございます! TO_DATEを使って削除に成功しました☆彡 今後とも宜しくお願い致します。 | ||||||||||||||||
|
投稿日時: 2004-09-23 20:37
おまけです。
DATE型は時間を持っているので、日付を変換しても比較する値との時間が違うと 同じとは見られなくなります。
日付だけを指定して、TO_DATE()関数を使って DATE型に変換した場合の時間は次のようになります。
なんか、12:00:00 午前 = 00:00:00(24時間表示) みたいです。 じゃぁ、1秒遡ると
一時間後だと
午前12時の次が午前1時みたい・・・ なっとくできな〜い。(^-^; |
1