10gでの日付比較について教えてください

このQ&Aのポイント
  • PL/SQLを8iで実行し、データ抽出できていたものが、10gで実行すると抽出できなくなりました。処理の内容は、PL/SQL実行時に日付を引数として渡し、データ抽出する表の日付と比較するようにしています。引数の値はCHAR(YYYY/MM/DD)で渡す為、表の日付(DATE型)をCHARに変換して比較しています。回避方法のご指導をお願いします。
  • 10gでの日付比較に関して困っています。PL/SQLを8iで実行していた場合、日付比較が正常に動作していましたが、10gで同じ処理を行うとデータが抽出できなくなりました。処理の詳細としては、PL/SQL実行時に引数で渡された日付とテーブルの日付を比較しています。日付の形式は引数がCHAR(YYYY/MM/DD)で渡され、テーブルの日付はDATE型です。なにか回避方法や改善策などがあれば教えていただきたいです。
  • 10gでの日付比較について相談です。以前はPL/SQLを8iで実行していた際、正常に動作していたのですが、10gに移行後、同じ処理を行うとデータが抽出できなくなりました。具体的には、PL/SQL実行時に引数として渡された日付とテーブルの日付を比較しています。引数の日付はCHAR(YYYY/MM/DD)形式で渡され、テーブルの日付はDATE型です。何か解決策や回避方法があれば教えてください。
回答を見る
  • ベストアンサー

10gでの日付比較について教えてください。

PL/SQLを8iで実行し、データ抽出できていたものが、10gで実行すると抽出できなくなりました。 処理の内容は、PL/SQL実行時に日付を引数として渡し、データ抽出する表の日付と比較するようにしています。 引数の値はCHAR(YYYY/MM/DD)で渡す為、表の日付(DATE型)をCHARに変換して比較しています。 記述は以下の通りです。(一部記載) WHEREの条件pDT_DATEを'2006/03/31'のように固定値で記述すると8iで実行した結果と同じデータが抽出できます。 回避方法のご指導をお願いします。 CREATE OR REPLACE PROCEDURE CMA010PB ( pDT_DATE IN VARCHAR2 --基準日 )   <中略> --CURSOR データ抽出 CURSOR cTRHKCursor IS SELECT TT.cd_cust AS cd_cust --顧客コード FROM t_torihiki_rireki TT --取引履歴 WHERE NVL(TO_CHAR(TT.dt_denp,'YYYY/MM/DD'),'0000/00/00') <= pDT_DATE; BEGIN FOR rTRHKCursor IN cTRHKCursor LOOP    <以下省略>

  • Oracle
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • mebun
  • ベストアンサー率45% (10/22)
回答No.1

逆にpDT_DATEをTO_DATE関数で日付型にて比較しては。

ksq1207
質問者

お礼

mebunさん、アドバイスありがとうございました。 pDT_DATEをTO_DATEで日付型に変換して実行してみたらできました。 助かりました、ありがとうございました。

関連するQ&A

  • 日付だけを見てデータをSELECTしたい

    お世話になっております。 開発環境:MySQL3.23.58にて、DATETIME型で日付をYYYY-MM-DD hh:mm:ssで登録しています。 そこから、下のように SELECT * FROM テーブル名 WHERE DATE( フィールド名 ) = '2007-09-12'; などと、日付だけを見てデータを抽出したい(時間は無視したい)のですが、マニュアルを見ると 『DATE() は MySQL 4.1.1 以降で使用できる。』 と書いてあり、やり方が分からず途方にくれております。 上記環境下で、うまく日付のみを見てデータを抽出する術は無いものでしょうか。 アドバイスをいただけたらと思います。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 日付書式に変換でこまっています!

    文字型を日付型に変えるTO_DATE関数ってありますよね。 もともとのデータは数値型(NUMBER型)だったとしたら、 その数値型を日付型に変換するためには、 例)TO_DATE(TO_CHAR(20001201),'YYYY/MM/DD'))で実行すれば、 結果は、「2000/12/01」になりますよね? しかし、ここで問題なのがもともとのデータの数値型の初期値が0で設定されていて、なおかつその行も結果として出したい場合どうしたらいいのかわかりません。 例が解りにくくてすいません! 何か解決法がありましたらぜひ教えて下さい!

  • Oracle10gのsql分についての質問です。(WHERE句)

    Oracle10gのsql分についての質問です。(WHERE句) 先ほどの続きになります。申し訳ございません。 日付型のフィールドに[2006/07/01 01:02:03]と、 日付と時刻のデータが入っています。 SELECT文で日付が[2006/07/01]のみのデータを 抽出する場合、TO_CHAR(フィールド名,'YYYY/MM/DD')と 教えていただき成功いたしました。 ところが、WHERE句にこれと同じ文を書くと、 「リテラルが書式文字列と一致しません」とエラーに なります。 どうすれば良いのでしょうか? 宜しくお願い致します。

  • 日付の範囲検索がしたい

    お世話になります。 テーブル名:info フィールド名:no,date,name フィールドのデータタイプ:int型,char型,char型 のデータベースがあります。dateにはyyyy/mm/ddの形でデータが入っているのですが、 そのdateから、例えば2004/01/01~2005/01/01までに該当するデータを検索して、抽出したいのですが、方法がわかりません。 SELECT REPLACE(date, '/', '') FROM info で、“/”がないデータを取り出すことはできるのですが、その後どうしたら良いかがわかりません。 どなたかいい方法教えていただけないでしょうか?

  • ACCESS97 日付での検索

    ACCESSのプログラム、日付でデータを検索する場合次に様に書いています DIM DATEissu AS DATE DATEissu="02/09/01" ' テスト SET RS=DB.OPENRECORDSET("SELECT * FROM A_TABL WHERE 日付 = #" & DATEissu & "#") この検索で、データがあるにもかかわらず抽出が出来なくなりました。 デバッグでデータを参照しても異常はないようです。 コントロールパネル-地域-日付で短い形式を yyyy/MM/DD に設定しなおすと問題なく抽出できますが、日付の欄の幅等の設定をやり変えねばなりません。 形式を yy/MM/DD に設定すると抽出されなくなります。 OSはウィンドウ98です。 プログラムの作り方が悪いのか、他に原因があるのか知っている方お教えください。 このような事が起こらないプログラムの書き方知っている方お教えください。

  • 「今日の日付を含む」と言う条件のクエリ(yyyy/mm/dd hh:mm形式)

    テーブル1の 日付フィールドには「yyyy/mm/dd hh:mm」形式にしているため 「2009/02/28 0:30」と入力されています。 クエリ1に SELECT テーブル1.日付 FROM テーブル1 WHERE (((テーブル1.日付)=Date())); とした場合は 「2009/02/28 0:30」 は表示されません。 テーブル1の 「2009/02/28 0:30」を「2009/02/28 0:00」にすれば クエリ1を実行すると「2009/02/28 0:00」のレコードが表示されます。 どうすれば日付+時間の場合も日付で抽出することができるのでしょうか? アクセス2003です。 よろしくお願いします。

  • Access SQL日付時間型検索

    Accessで以下SQLを書いたのですが SQLC = "SELECT * FROM tbl_data where date_end = #"&tmp_date_end&"#" ”引数が間違った型、許容範囲外、または競合しています。 ” とですます。 何か書き方の誤りがあるのでしょうか? テーブル名 tbl_data のフィールド名date_end から変数tmp_date_endと同一データ検索文です。 DBの型は日付時間型です。 変数はyyyy/mm/ddです。

  • 指定した値の範囲内の列を抽出

    Access2000を使用 前回答えてもらったとおり指定した1つの値からはデータの抽出成功しました。 で今回も同じような内容で、指定した値(月初から今日の日付)までの値を抽出するようなSQL文がわかりません。 以下はwhere以降で、BETWEENを使用しましたが抽出できませんでした。 他の方法はございますか? where (クエリー名.クエリーカラム名) BETWEEN #" & Format(Date - mday + 1, "yyyy/mm/dd") & "# AND #" & Format(Date, "yyyy/mm/dd") & "#" よろしくお願いします。

  • ACCESS日付形式について質問です。

    日付抽出条件を含んだフォームを作成したのですが、午前中までyyyy/mm/ddの形式で入力し、抽出できたのですが、今mm/ddの形式で入力しないと抽出できなくなりました。 変更をした覚えはないのですが・・・ yyyy/mm/ddで抽出できる方法を教えてください。 おねがいします。

  • PL/SQLでのTO_DATEの時間取得について

    お世話になります。 PL/SQLでDATE型のデータの日時を取得する方法を教えてください。 PL/SQLでDBの値を、TO_CHARで取ってきて、その値をTO_DATEすると、時刻が落ちてしまいます。 charWorkEndDate VARCHAR2(20); dtWorkEndDate DATE; charWorkEndDate := to_char(V00061_Rec.S_DATE5, 'YYYY/MM/DD HH24:MI:SS'); dtWorkEndDate := to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS'); 出力結果 --charWorkEndDate- [2005/12/25 06:00:19] --dtWorkEndDate- [05-12-25] to_dateの1つ目の引数にシングルクォーテーションが必要かと思い、 dtWorkEndDate := to_date('''||charWorkEndDate||''', 'YYYY/MM/DD HH24:MI:SS'); としてみたのですが、その場合、「ORA-01841: (周)年は-4713と+9999の間の0以外の数を指定する必要があります」とのエラーが出てしまいます。 どなたかDATE型のデータの時刻を取る方法をご存知でしたら、教えていただけますでしょうか。 よろしくお願いします。