• ベストアンサー
  • すぐに回答を!

日付型について

Oracleの日付型で苦労しております。 教えてください。 言語 ASP(VBscript) データベース Oracle 下記のようなプログラムを作成しました。 STARTTIME=CDate(2010/2/16 13:00:00) SYURYOTIME=CDate(2010/2/16 14:00:00) SQL="SELECT * FROM TABLE " SQL=SQL & "WHERE TO_CHAR(Field,'yyyy/mm/dd HH24:MI:SS') BETWEEN '" & STARTTIME & "' AND '" & SYURYOTIME & "'" Set rs0 = OraDatabase.DbCreateDynaset(SQL, 0) この場合は予想通りの結果を返します。 しかし、時刻を10時以前の STARTTIME=CDate(2010/2/16 08:00:00) SYURYOTIME=CDate(2010/2/16 09:00:00) にすると予想外の結果を返しません。 これは、Oracle側の形式"2010/2/16 08:00:00"で、 CDate関数側が"2010/2/16 8:00:00"となってしまうためと考えていますが、対応方法がわかりません。 何卒、ご教授くださいますようお願い致します。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数320
  • ありがとう数6

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

  • ベストアンサー
  • 回答No.1

ASP(VBScript)では、Format関数のような物はないので、 書式を何とかしたいのであれば、下記のサイトが参考に なります。 http://www.b-s-c.co.jp/~moritake/oboegaki/h_vbs_fnc01.html 自分だったら、SQL文の方で書式をあわせますが それでは駄目なのでしょうか SQL文ならORACLEのTO_DATEで書式あわせができますけど 例(動作未確認) STARTTIME="2010/2/16 08:00:00" SYURYOTIME="2010/2/16 09:00:00" SQL="SELECT * FROM TABLE " SQL=SQL & "WHERE Field BETWEEN to_date('" & STARTTIME & "' ,'yyyy/mm/dd hh24:mi:ss')" & _ " AND to_date('" & SYURYOTIME & "' ,'yyyy/mm/dd hh24:mi:ss') "

共感・感謝の気持ちを伝えよう!

その他の回答 (1)

  • 回答No.2
noname#114763
noname#114763

Format(STARTTIME, "yyyy/MM/dd HH:mm:ss") Format(SYURYOTIME, "yyyy/MM/dd HH:mm:ss") Format は Microsoft.VisualBasic.Format です。 あと、個人的には SYURYOTIME は ENDTIME にして欲しいです。(どうでもいいことですが)

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • CopyToClipboardからEXCELへPaste

    oo4o+excel2002で開発しています。 OracleにSQLを投げて戻ってきた結果をExcelに貼り付けたいのですが、"Pasteに失敗しました"というエラーが出てしまします。 コードは以下のように書いてます。 ====================================== Set rs = OraDatabase.CreateDynaset(strSql,ORADYN_READONLY) 'クリップボードにコピー rs.CopyToClipboard -1 '当ブックのシートに貼り付ける Windows("aaa.xls").Activate Worksheets("bbb").Range("A1").Select ActiveSheet.Paste ============================================ ActiveSheet.Pasteの部分で"Pasteに失敗しました"というエラーで落ちます。 ご存知の方教えてください。よろしくお願いします。

  • Excel VBA で Oracle CLOB型カラムの文字列を取得する方法

    Excel VBA を使用して、Oracleに格納されている文字列を取得しようとしています。 Number型やVarchar2型のカラムからは問題なく取得できるようになったのですが、CLOB型で文字列を格納しているカラムからの取得でつまずいています。 自分の書いた方法だと、1600バイト以上の文字列が格納されているとエラー文字が返ってきてしまいます。 これ以上の文字数を取得する方法について教えてもらえないでしょうか? '---// コード抜粋 ココから //--- 'ORAセッション生成 Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'ORADB生成 Set OraDatabase = OraSession.OpenDatabase(<<dbname>>, <<id>> & "/" & <<passwd>>, 0) Dim SQL As String '一覧取得用SQL Dim RS As Object 'レコードセット SQL = " SELECT <<<clob_col_name>> FROM <<table_name>> " Set RS = OraDatabase.DbCreateDynaset(SQL, 0&) Range("A1").Value = RS.fields("<<clob_col_name>>").GetChunk(0, 3263) RS.Close '---// コード抜粋 ココまで //--- 環境は、Excel 2003、Oracle 9iです。 ひとつよろしくお願いいたします。

  • oracleのDate型

    Ceate table test( field1 date ) insert into test values(current_timestamp); 上記の処理でDate型の列にcurrent_timestampデータを入れても、年月日までしかはいらないのですが、yyyy/mm/dd hh24:mi:ssの形で はできないのでしょうか?oracleは10gです。

  • Oracleのselect文で日時表示する簡単な方法ないですか?

    SQL Plusで、select * from table とするとdata型はyyyy/mm/ddで表示されます。 いちいちto_char(time_stamp,’yyyy/mm/dd hh24:mi:ss’)とするのは苦痛なので、デフォルトで時間まで表示させる設定方法があったら教えてください。 # 私は、時々手作業でデータを集めている素人です。 # いままではSQL Serverだけだったのが、Oracleが増えて # 作法が異なるので戸惑ってます。

  • 同じSQL文での検索結果が異なる

    visualbasic2005とoracleを使ってデータベース管理ソフトを作っています。 ひとつのデータのフィールドはいくつかあるのですが、 DATAUPLOADというフィールド値をSQL文で検索するときのみ、 土曜日のデータを拾おうとするとなぜか検索をかけるごとに 件数が1件ずつ減っていくという現象が起きています。 他のフィールドや土曜日以外のフィールドの検索の時には そのようなエラーは起こらないのですが、 同じSQL文で検索結果が随時異なってしまう場合には どのような原因が考えられますでしょうか? DATAUPLOAD は'2008/03/12 00:00:00'の形式のDate型データです。 あるDATE(日付)のデータを検索するときに使用しているSQL文は、 SELECT * FROM DATABASE WHERE DATEUPLOAD BETWEEN TO_DATE(' & CStr(Format(DATE, "yyyy/MM/dd")) & 00:00:00','yyyy/MM/dd hh24:mi:ss') AND TO_DATE(' CStr(Format(DATE, "yyyy/MM/dd")) & 23:59:59','yyyy/MM/dd hh24:mi:ss') です。 いろいろとSQL文を変更してみたのですが、 同じエラーが続いています。 何か思い当たることがありましたら 教えていただければと思います。

  • SQL*PLUSでの分秒までの表示の仕方

    お世話になっております。 Oracle SQL*PLUSでデータを打ち込んでいるところなのですが、 表示の仕方で分からないところがあるので、 どなたか教えていただけないでしょうか? date型で指定して日付カラムを作ったところに TO_DATE('2009-01-02 10:00:10','YYYY-MM-DD HH24:MI:SS'), と入力したのですが、select文でデータを検索したところ DATE -------- 09-01-02 と返ってきました。これを分、秒まで表示させるには どうしたらよいでしょうか?? よろしくお願いいたします。

  • Oracleのタイムゾーン変更方法を教えてください

    現在、AIX5.2Lで2つのOracleデータベース(仮にA,Bとする)を実行しています。 以下のSQLを実行した際の結果が、おのおの異なっており 恐らくタイムゾーンの違いによる物かと相当しているのですが、 タイムゾーンの変更方法が分からず困っております。 ■実行SQL SELECT TO_CHAR( SYSDATE, 'yyyy/mm/dd HH24:MI:SS' ) FROM dual; ■結果(日本時間:21時44分に実行) A:2005/03/11 12:53:24 →NG B:2005/03/11 21:44:20 →OK ■環境 OS:AIX5.2L DB:Oracle9.2.0.0 AもBと同様に日本時間で結果を返すようにするには どのようにすればよろしいでしょうか? よろしくお願いいたします。

  • oo4o CreateDynasetによるデータ取得

    こんばんわ。知っている方がいたら教えて下さい。 今、VB6.0&ORACLE9iで開発を行っています。 oo4o接続で、CreateDynasetを使用し、下記のようなSQL文を投げています。ただし、取得するレコードは0件になります。 SELECT SUM(項目a) FROM テーブルA WHERE 条件1 GROUP BY を使用せず、SUMを使用すると、oraDynaset.EOFがFALSEとなり、OraDynaset.RecordCountは1件となります。 (当然、SQLはSQL PLUSにて流して件数なしの確認済みです) これってなんでなのでしょうか?

  • シェル内で「'」に囲まれた部分への変数の展開

    oracleにアクセスするシェルを作成しており、期間指定の部分を変数で 指定したいと思っています。 しかしシングルクォーテーションに囲まれた部分の扱い方がよくわからず、 やむを得ず、変数内にクォーテーションを持たせ対処しました。 具体的には【現状】に示すようなコードです。 【現状】でも動くには動くのですが、将来的にはシェルの引数として 渡して実行したい為、出来れば変数内にはクォーテーションを持たせず 【希望】に示すイメージのコードにしたいと思っています。 単にエスケープの仕方の問題のような気がしているのですが、 なかなかうまくいきません。 変数の定義の部分が【希望】のとおりであれば、SQL部分の文字列は 多少変えてしまっても問題ありません。 シェル内で「'」に囲まれた部分への変数の展開させる方法、 これを教えてください。 よろしくお願いします。 --【現状】------------------------------------- FROM_DATETIME="'2010-10-10 00:00:00'" TO___DATETIME="'2010-12-10 00:00:00'" sqlplus scott/tiger@oracle << EOT select count(*) from tablename where columnname between to_date(${FROM_DATETIME}, 'YYYY-MM-DD HH24:MI:SS') and to_date(${TO___DATETIME}, 'YYYY-MM-DD HH24:MI:SS') / quit EOT ----------------------------------------------- --【希望】------------------------------------- FROM_DATETIME=2010-10-10 00:00:00 TO___DATETIME=2010-12-10 00:00:00 sqlplus scott/tiger@oracle << EOT select count(*) from tablename where columnname between to_date(\'${FROM_DATETIME}\', 'YYYY-MM-DD HH24:MI:SS') and to_date(\'${TO___DATETIME}\', 'YYYY-MM-DD HH24:MI:SS') / quit EOT -----------------------------------------------

  • VB6でのSQL実行について

    VB6でのSQL実行について VB6でのSQL実行について困っています。 SQL文を作成し、ダイナセットで実行している最中にも 再度別のSQL文をダイナセットで実行することは可能なのでしょうか? 言語はVB6.0、DBはOracle9iを使用しています。 イメージ的にはこんな使い方をしたいです。 dim lngRecordRow1 as long 'レコード数1 dim lngRecordRow2 as long 'レコード数2 dim OraDynaset1 As OraDynaset dim OraDynaset2 As OraDynaset dim strSQL as string 'SQL文 dim lngCnt1 as long 'ループカウンタ1 dim lngCnt2 as long 'ループカウンタ2 strSQL= ---SQL文作成1回目--- Set OraDynaset1 = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) 'SQL文実行1回目 lngRecordRow1 = OraDynaset1.RecordCount for lngCnt1 = 1 to lngRecordRow1 '--- 処理 --- strSQL= ---SQL文作成2回目--- Set OraDynaset2 = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) 'SQL文実行2回目 lngRecordRow2 = OraDynaset2.RecordCount for lngCnt2 = 1 to lngRecordRow2 '--- 処理 --- next lngCnt2 next lngCnt1 1回目で取得したSQL実行結果を行単位でループをまわしつつ、1回目で取得したレコードの結果を条件に使用して別のSQL文を作成し、ループをまわしている最中に実行したいです。 その際、2回目のSQLの結果が2レコード以上の場合、さらにループをまわして条件判別をしたいです。 かなり困っています。回答待ってます。