• ベストアンサー

Oracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。 データベースはオラクルを使っていて、 SQL文で、抽出するときにエラーが出て困っています。 日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。 2005/05/26 を抽出したいのですが、 BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59' だと、エラーでできません。 どなた様か、ご教授よろしくお願いしますm(_ _)m

  • Oracle
  • 回答数5
  • ありがとう数17

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

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.3

日付検索を行う場合は、以下のように書式を含める必要があります。 col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS') ただ、厳密には col >= TO_DATE('2005/05/26', 'YYYY/MM/DD') AND col < TO_DATE('2005/05/27', 'YYYY/MM/DD') と書くべきでしょうね。

その他の回答 (4)

  • sapporo30
  • ベストアンサー率33% (905/2715)
回答No.5

みなさんの回答も正解です。 もうひとつ、trunc関数を使用することが出来たはず where trunc(col1) = to_date('2005/05/26', 'YYYY/MM/DD')

  • hamu1
  • ベストアンサー率66% (2/3)
回答No.4

#1さんや#2さんの方法で結論は出ていると思いますが。。。 補足です。 Date型のカラムに対して 文字型の条件を指定した場合、 デフォルトフォーマットとして 現行セッションのNLS_DATE_FORMATが採用されます。 例えば、NLS_DATE_FORMATが「RR-MM-DD」になっていれば WHERE カラム='05-05-26'や WHERE カラム='2005-05-26' と書けばよいはずです。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

#1さんの方法で良いでしょうがどうしても時刻が必要なら。 to_char([日付型の列名], 'yyyy/mm/dd hh24:mi:ss')と編集して、 比較してください。

回答No.1

こんばんは。 >>BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59' BETWEENの前後は、ただの文字列ですよ? >>2005/05/26 を抽出したいのですが WHERE TO_CHAR(カラム,'YYYYMMDD')='20050526' でいいのでは? (^^ゞ

関連するQ&A

  • 日付型について

    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"となってしまうためと考えていますが、対応方法がわかりません。 何卒、ご教授くださいますようお願い致します。

  • phpの日付検索方法

    ざっくりとした書き方になりますが失礼します。 検索条件の項目に日付の検索をしたいと考えています。 開始日付と終了日付をinput typeのtextで用意し入力された日付 の範囲内にあるデータをSQLで抽出したいのですが。 日付自体のフォーマットはどのような形で統一した方が検索しやすいでしょうか? それに合わせてtextでも何か制限みたいなのをかけれたら良いのですが。 現在テーブルのその日付データもtextの入力される日付データもフォーマットが 決まっていないので日付検索が作りやすいフォーマットにしたいと思っています。 また、どちらかの日付だけ入力する場合も考えられると思うので両方入力していないと 使えないBETWEENとかは使わずに ANDの方が良いかなと思っています。 1.使いやすいフォーマット 2.1.に関連したtextエリアでの入力制限方法 3.それらを使った実際の参考例のSQL文 上記3つについて良い方法がございましたらご教授願いますでしょうか?

    • ベストアンサー
    • MySQL
  • 日付型(時刻含む)を抽出条件にして行を抽出したい。

    はじめまして、よろしくお願いします。 現在SQLサーバー2000を使用してこの処理を行おうと思っております。 一度テーブルに格納したデータをSELECT文を使って抽出したい と思っているのですが、WHERE条件に日付型のフィールドを指定するとうまく行きません。(時刻が日付型のフィールドに入っている場合、うまくいきません。) やっていることは YMD(DATE型・主キー)、ID(VERCHAR型・主キー)、NAME(VERCHAR型) というのテーブル(テーブル名:MEIBO)に入っている 2002/02/02 14:10:55、0001、山田 太郎 というデータを 取込年月日、個人IDを指定して特定の列を取り出そうとしています。 SQL文は SELECT * FROM MEIBO WHERE YMD = '2002/02/02 14:10:55' AND ID = "0001' と記述していますが、一件もヒットしません。 DATE型のフィールドにはINSERTするときにGETDATE()をつかってシステム日付を 格納するようにしています。 GETDATE()ではなく、DATE()を使ってシステム日付を格納した 2002/02/02、0001、山田 太郎 という時刻の入っていないデータに対しては SELECT * FROM MEIBO WHERE YMD = '2002/02/02' AND ID = "0001' というSQL文でヒットするのですようです。 時刻が入ったらそのフィールドを抽出条件として使うことは無理なのでしょうか? 基本的な部分で勘違いしているのかもしれませんが なにかお気づきの点がありましたら、ご教授ください。

  • 日付の切り出し方法について

    OracleのSQLにおいて、 日付の値を指定した文字だけ切り出して取得する方法がわかりません。 例えば、日付型の"9999/01/15"という値から "9999/01/"という値だけ切り出すことは可能でしょうか? 基本的な質問で申し訳ございませんが、 どなたかご教授いただけませんでしょうか? よろしくお願いいたします。

  • VBAからoracleに接続しSQLで日付絞込み

    かなりの素人で申し訳ありません。初心者です。 EXCEL2016を使用し、VBAからoracleに接続、日付のカラムを範囲指定して検索、excelに出力するツールを作成しています。 テーブル:注文テーブル 項目:注文番号、項番、納期 納期は日付型です。 注文番号を指定してデータの取得はできているのですが、納期を指定すると「実行時エラー ODBCドライバーは要求されたプロパティをサポートしていません」とエラーになります。日付指定の方法が違うのではと推測するも解決しません。ご教授頂けないでしょうか。 SQL = “SELECT 注文番号, 項番, 納期 FROM 注文テーブル WHERE 納期 BETWEEN #2021/01/01# AND #2021/01/31#;”

  • Oracleに日付や時刻のリテラルはないのか

    Webで色々検索しているのですが、なかなか「これだ!」という情報に当たらず、お教えいただきたく存じます。 OracleのSQLで、日付や時間を表現するリテラルは存在しないのでしょうか? 必ず to_date(文字列, 'YYYY/MM/DD') と言うように文字列表現と関数の組み合わせでなければならないのでしょうか? to_date(文字列, 表現形式)とto_timestamp(文字列, 表現形式)を見つけたのですが、to_time(文字列, 表現形式)というのが見当たりませんでした。to_time関数は存在しないのでしょうか オラクルのSQLはバージョンによって微妙に違う、というような記述を過去ログに見つけたのですが、8と9について情報をお願いします。

  • mysqlで日付が比較できない・・・

    はじめまして 皆様の知恵を貸してください mysqlでの質問なのですが、 簡潔にいうと日付が比較できません。 どういうことをしたいのかというとsqlからwhere文で今の日付より大きいもデータを抽出するということです データベースの構造は id int型 endtime datetime型 で構成されています endtimeには既にいくつかのdatetime型の値が入っています 例えば 2012-12-14 09:18:00 のように入っています でGETDATE()関数を使って今現在の時刻より未来のものだけ抽出するために convert関数を使って一度varchar型に変換することで比較しようとしました 色々インターネットで調べた結果次のような文なのではないかと考えました select id,endtime from [データベース名] where CONVERT(VARCHAR,endtime,121)>=CONVERT(VARCHAR,getdate(),121); しかし実行ができません 比較する方法を教えて欲しいです

    • ベストアンサー
    • MySQL
  • Oracle11gのDATE型

    オラクルマスターのBronzeSQL基礎の勉強をしております。 テキストでDATE型の説明を読んで「日付、時刻を含む固定長7バイトの日付データ型」と書かれていてアレッと思いました。 日付と時刻はデータベースではどのように持っているのでしょうか? ご存知のかたがおられましたら教えてください。

  • パラメータで、あいまい検索をしたい。

    日付のレコードが 02/01/01 11:11:11 このような表示になっています。 これをパラメータで一定の範囲で抽出したいのですが、 どのようにすればよいでしょうか。 たとえば、Between #02/01/01# and #02/11/11# とすれば、抽出できますが、 これをそのままパラメータに置き換えて、 Between #[開始日付]# and #[終了日付]# とはいかないようなので何か方法はありませんか。

  • 日付・時刻型の条件抽出方法について教えてください。

    1.accessで日付・時刻型(yyyy/mm/dd hh:nn:ss)のデータを持つフィールドから、between関数or<>の式で期間を抽出する。 2.[開始日]と[終了日]をパラメータorフォームのテキストボックスに入力して、期間抽出する。 3.[開始日]、[終了日]は日付のみ入力したい(yyyy/mm/dd)。 4.その際、[終了日]は入力した日付の00:00:00を持つレコードしか抽出されず、同日で以降の時間を持つレコードは抽出外になってしまう。 という問題を抱えています。 [終了日]に"+1"を加えたのですが、"式を評価することができません"が返ってきます。 上記を解決できる方法ご存知の方、教えていただけますでしょうか? よろしくお願いします。