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

日付の範囲検索がしたい

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

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

  • 回答数3
  • 閲覧数3067
  • ありがとう数2

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

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

SELECT * FROM info WHERE date BETWEEN '2004/01/01' AND '2005/01/01' で取れませんか?

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

質問者からの補足

回答ありがとうございます。 教えていただいた方法を試したのですが、 「サーバー : メッセージ 245、レベル 16、状態 1、行 1 構文エラー。varchar 値 '2004/09/13' から int データ型に変換できませんでした。」 というエラーが出てしまいました。 なぜ出てきたのでしょう? もしかして、データの入力をVBScriptで作成したASPのページから行っている所為なのでしょうか?

関連するQ&A

  • 同じ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文を変更してみたのですが、 同じエラーが続いています。 何か思い当たることがありましたら 教えていただければと思います。

  • 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    <以下省略>

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

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

    • ベストアンサー
    • MySQL

その他の回答 (2)

  • 回答No.3

misty7666さんの書き方で取れると思います。 SQL文の日付の指定部分ですが、シングルクォーテーション「'」で囲まれていないと「構文エラー・・・・」 が発生するので、その点を確認してみてください。 (「SELECT * FROM info WHERE date BETWEEN 2004/01/01 AND 2005/01/01」とかになってませんか?)

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

質問者からのお礼

回答ありがとうございます。 できました! 原因は、フィールド内に入っていたゴミデータの所為でした。 テストデータで試していたので、「1/1/2005」や「1/1」みたいな変な形式のデータがあったのですが、それらを消すもしくはyyyy/mm/ddの形に直したら、misty7666さんに教えていただいた方法でできました。 回答してくださったみなさん、本当にありがとうございましたm(_ _)m

  • 回答No.2
  • O_cyan
  • ベストアンサー率59% (745/1260)

select * from info where date between to_char('2004/01/01','yyyy/mm/dd') and to_char('2005/01/01','yyyy/mm/dd') ; ではどうでしょうか。

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

質問者からの補足

回答ありがとうございます。 教えていただいた方法は、そのままコピー&ペーストしていいんですよね? コピペで行った結果、 「サーバー : メッセージ 195、レベル 15、状態 10、行 3 'to_char' は 関数名 として認識されません。」 とエラーを出されてしまいました・・・

関連するQ&A

  • TIMESTAMPを検索するフォームを設けたい

    HTMLで上下にフレーム分割し、 ・上段が検索フォーム ・下段が問い合わせ結果のリストアップ、 という構造があるのですが、MYTIME (timestamp(14))という フィールドの検索フォームはどのように設けるのが一般的でしょうか。 例えば、 ・7月1日以降にデータが更新されたレコードのみ抽出、 ・今日の12:00以降に更新されたレコードのみ抽出、のように用いたいです。 MYTIMEには、 20051221080904 20060701194647 などのレコードがあります。 timestampでなく、date型なら、↓のように、 yyyy-mm-dd、yyyy/mm/dd、yyyymmdd書式で問い合わせができることを経験してます。 select myfield,mytime from myfield where mytime >= '20060714' select myfield,mytime from myfield where mytime >= '2006/07/14' select myfield,mytime from myfield where mytime >= '2006-07-14' そのとき、検索フォームは <input type="text" name="date_more" maxlength="10" title="yyyy-mm-dd、yyyy/mm/dd、yyyymmdd書式で入力">以降 <input type="text" name="date_less" maxlength="10" title="yyyy-mm-dd、yyyy/mm/dd、yyyymmdd書式で入力">以前 ・・などとしました。 今回のTIMESTAMP型も、↑と同じでいけますか? 年月日と時分秒は分割したほうがよかったりするのでしょうか? そうすると、SQL文に渡す前に、年月日.時分秒 のようにくっ付けて WHERE条件に加えることになりますよね? 標準的な方法をご教示ください。

    • ベストアンサー
    • PHP
  • 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です。 プログラムの作り方が悪いのか、他に原因があるのか知っている方お教えください。 このような事が起こらないプログラムの書き方知っている方お教えください。

  • 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です。

  • 日付取得、計算及び表示コードが動作しません。

    日付取得、計算及び表示コードが動作しません。 下記のコードのどこが間違っているのか、どなたかお分かりですか? このコードでは、今日の日付をサーバから取得し、それから10日後の日付を計算して表示したいです。 $currentdate = .getdate(); $yyyy = $currentdate["year"]; $mm = $currentdate["mon"]; $dd = $currentdate["mday"]; $int_day = 10; $duedate = .date("y/m/d", mktime(0, 0, 0, $mm, $dd+$int_day, $yyyy)); echo "$duedate" また、上記のコードが動作するようになったとして、表示される日付は「2008/06/10」のようになるかと思いますが、これを「2008年06月10日」のように表示させる方法をご存知でしょうか? >$duedate = .date("y/m/d", mktime(0, 0, 0, $mm, $dd+$int_day, $yyyy)); 上記コードを下記のように変更してもだめです。 >$duedate = .date("y年m月d日", mktime(0, 0, 0, $mm, $dd+$int_day, $yyyy)); よろしくお願いします。

    • ベストアンサー
    • PHP
  • 「今日の日付を含む」と言う条件のクエリ(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です。 よろしくお願いします。

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

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

  • 【ACCESS】クエリによる正規表現の基本的書き方

    いつもお世話になっております。 ACCESSのクエリで、下記8パターンにマッチする文字列を yyyyMMddの形で抽出する方法が判りません。 例でも構わないので、ご教示いただけないでしょうか。  (1)yyyyMMdd       (数字は半角)  (2)yyyy年M月dd日   (数字は半角)  (3)yyyy年MM月dd日 (数字は全角)  (4)yyyy年M月dd日   (数字は全角)  (5)yyyy年MM月dd日  (数字は半角)  (6)yyyy年M月dd (数字は半角)  (7)yyyy/MM/dd (数字は全角)  (8)yyyy/MM/dd      (数字は半角)   ※12月32日等の日付不正は対象外 数字の全・半角は区別しなくても抽出可能と考えています。 ただ、そもそも、正規表現の基本的な書き方が判らず。。 グループ化させるための括弧「()」や、論理和の「|」を使うと 抽出できませんでした。 accessでは利用不可なのでしょうか。。 一応、私の作成したクエリを掲載致します。 テーブルaからdate列を抽出します。上記8パターンにマッチする場合は、yyyyMMdd形式で、いずれにもマッチしなければ空白を返させたいと思います。 SELECT IIf (a.date Like '[1-9][0-9][0-9][0-9](0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])', a.date, IIf (a.date Like '[1-9][0-9][0-9][0-9]年[1-9]月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]年(0[1-9]|1[012])月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]年[1-9]月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]年(0[1-9]|1[012])月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]年[1-9]月(0[1-9]|[12][0-9]|3[01])', Format(CDate(Format(Replace(Replace(a.date, '年', ''), '月', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]/(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])', Format(CDate(Format(Replace(Replace(a.date, '/', ''), '/', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]/(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])', Format(CDate(Format(Replace(Replace(a.date, '/', ''), '/', ''), "@@@@/@@/@@")), "yyyymmdd"), '' ) ) ) ) ) ) ) ) FROM a 以上、何卒よろしくお願いいたします。

  • 日付をVARCHAR2型でYYYYMMDDと表示したい

    DATE型(YYYY/MM/DD HH24:MI:SS)の値を取り出し、 VARCHAR2(8)型の文字列YYYYMMDDにしたいと思っています。 TO_CHAR(DATE型,'YYYYMMDD')としても、YY-MM-DDと表示されてしまいます。 YYYYMMDDと文字型で表示させるにはどうすればよいのでしょうか。 宜しくお願い致します。

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

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

  • 日付書式に変換でこまっています!

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