• ベストアンサー
  • 困ってます

SQL文に時刻が含まれる場合

SQL Serverのテーブル 列名:時刻 データ型:datetime型 にて作成しています。 Accessにてテーブルをリンクさせ、SQL文にてアクセスするようにしているのですが、時刻が画面にて入力された開始時刻と終了時刻との範囲内のでーたを取得したいのです。 画面の開始時刻と終了時刻は書式を時刻(L)にて指定しています。 0:00:00 ~ 23:59:59 と画面にて指定した場合に strWhere = "時刻 >= " & Me![開始] strWhere = strWhere & " AND 時刻 <= " & Me![終了] strWhere = strWhere & " ORDER BY 日付,時刻 ASC" 上記SQLでは、 行1:00の近くに無効な構文があります。 とメッセージが表示されエラーになります。 strWhere = "時刻 >= '" & Me![開始] strWhere = strWhere & "' AND 時刻 <= '" & Me![終了] strWhere = strWhere & "' ORDER BY 日付,時刻 ASC" 上記のように文字として扱うと対象のデータが抽出されません。 Dim StDate As Date ' 開始 Dim EdDate As Date ' 終了 StDate = Format(Me![開始], "hh:mm:ss") EdDate = Format(Me![終了], "hh:mm:ss") にてMe![開始]をStDate、Me![終了]をEdDateに変更してみましたが同じでした。 なにか、よい方法はないでしょうか?

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

  • SQL Server
  • 回答数5
  • 閲覧数1045
  • ありがとう数2

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

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

sqlサーバーには時刻だけの型はありません。 accessの書式でそう見えているだけで実際は日付と時刻を持っています。 ですから抽出時には下記のように変換しないといけません。 "convert(char(8),時刻,108) >= '" & Me![開始] & "'"

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

質問者からのお礼

ありがとうございました。 無事データを抽出することができました。 Enterprise ManagerにてSQL Serverのテーブルの開くで全行を返すにて表示したときに、表示されなかったのでわかりませんでした。 本当にありがとうございました。

その他の回答 (4)

  • 回答No.4
noname#182251
noname#182251

SQL Serverに接続して試験できる環境にありません(^^; で、取り敢えず ADO で MDB に接続して試験しました WHERE (((DownLoadLog.DownLoadDateTime)>#1/23/2005 8:0:0# And (DownLoadLog.DownLoadDateTime)<#1/23/2005 9:0:0#)); のような書き方はエラーになります。これを WHERE (((DownLoadLog.DownLoadDateTime)>38375.33333333333333333333333333333333 And (DownLoadLog.DownLoadDateTime)<38375.375)); と数値で範囲指定したところ 1月23日8時~9時のデータが抽出できました。 要するに整数部が「年月日」小数部が「時分秒」です。 あくまでもSQL Serverではないので参考程度ですが

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

  • 回答No.3
noname#182251
noname#182251

#2です 「時刻」フィールドには時刻だけが入っているのか、日付+時刻が入っているのか? #2では時刻だけが入っているとしたものです。だから 1889 の部分ができる。 日付+時刻であれば、考え方を変えなければなりません

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

質問者からの補足

ありがとうございます。 テーブルには、日付、時刻、日付+時刻をもっております。 日付には、2004/12/01 時刻には、1:07:30 日付+時刻には、2004/12/01 1:07:30 と入っています。 時刻のみのときも、日付+時刻のときも、SQL ServerのテーブルをSQL文を使ってAccessからOPENしようとしたときにエラーになります。 範囲内のデータを取得したいので、日付+時刻にて読み込みたいと思っています。 よろしくお願いします。

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

Acsess2000 が作るSQL文を参照してみました。 クエリーに条件を >#0:00:00# And <#23:59:59# と入れると SELECT DownLoadLog.xTime, DownLoadLog.LogID FROM DownLoadLog WHERE (((DownLoadLog.xTime)>#12/30/1899# And (DownLoadLog.xTime)<#12/30/1899 23:59:59#)); ちょっと余計なものがあるのはご勘弁下さい(^^; ともかく <#12/30/1899 23:59:59# この辺りが参考にならないでしょうか?

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

質問者からの補足

ありがとうございます。 #12/01/2004 0:00:00# で試してみましたができませんでした。 :がダメみたいです。 SQL Serverをオープンするときにエラーになります。 とりあえず、日付までにしてSQL Serverに接続し、 データを読み込んでからIF文で判断するようにしました。 一種の逃げなので、良い方法があればよろしくお願いします。

  • 回答No.1

AccessではWhere条件で時刻・日付のデータを使用する場合は値の前後に#が必要だと思います。 ですから strWhere = "時刻 >= " & Me![開始] strWhere = strWhere & " AND 時刻 <= " & Me![終了] strWhere = strWhere & " ORDER BY 日付,時刻 ASC" を strWhere = "時刻 >= #" & Me![開始] & "# " strWhere = strWhere & " AND 時刻 <= #" & Me![終了] & "# " strWhere = strWhere & " ORDER BY 日付,時刻 ASC" とすれば良いのではないでしょうか? 実際に作成したわけでは無いので、何かありましたら補足をお願いします。<(_ _)> 参考までに、下記のURLで時刻の扱いについて記述してあります。

参考URL:
http://www.accessclub.jp/bbs3/0067/superbeg25196-2.html

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

質問者からの補足

ありがとうございます。 早速行ってみましたが、やっぱりエラーになります。 行1:'#0:'の近くに無効な構文があります。 とメッセージが表示されました。 ウォッチ式にてstrWhereの中を見ると 時刻 >= #0:00:00# となっています。 参考URLを見ましたがわかりません。 Nullの場合は、SQL文から外しているので、Nullの場合にはうまく動きます。 よろしくおねがいします。

関連するQ&A

  • Access VBA SQL文で教えてください

    strSQL = "SELECT 日付,ブロック_cd,時刻 FROM テーブルA" strSQL = strSQL & " WHERE 日付 = " & Me.売上日 & "" strSQL = strSQL & " AND ブロック_cd = & Me.cmb_ブロック & " strSQL = strSQL & " AND 時刻 = & Me.時刻 & " WHERE句以下を削除するとレコードを読み込んできます。 よって、WHERE句がおかしいようです。 テーブルA: 日付:日付/時刻型(yyyy/mm/dd) ブロック_cd:数値型 時刻:日付/時刻型(hh:nn) me.売上日:日付形式(yyyy/mm/dd) me.cmb_ブロック:コンボボックスの値(数値) me.時刻:時刻形式(hh:nn) おそらく、me.のくくり方がおかしいとは思うのですが どのように修正すればよろしいでしょうか? よろしくお願いします。

  • SQL文「DISTINCT」の「ORDER BY」について

    SQL文「DISTINCT」の「ORDER BY」について教えて下さい。 A列をDISTINCTで重複行の排除をしています。 その後、B列でORDER BYをかけたいのですが、エラーが 出てしまいます。A列でのORDER BYは成功します。 何か良い方法があれば教えて下さい。 よろしくお願いします。 SQL="SELECT DISTINCT A列 from table " &_ "WHERE (table.C列='100') " &_ "ORDER BY (table.B列) ASC " ⇒エラー    "ORDER BY (table.A列) ASC " ⇒成功

  • 同じ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文

    Oracle初心者なのですみません 助けてください。 TBL 日付,区分,開始番号,終了 2006/10/11 ,A,1,10 2006/10/11 ,B,20,22 見たいなTBLがあって、日付を指定すると 開始・終了の範囲を出力するSQL文を書きたいのですが・・・ 出力イメージは 2006/10/11,A,1 2006/10/11,A,2 2006/10/11,A,3 2006/10/11,A,4 | 2006/10/11,A,10 でこれをそのまま、新規TBLに追加したいのですが・・・・

  • AccessのSQL文 検索

    お世話になります AND検索でBetween検索とテキストでAND検索をさせているのですが ■不具合 下記のSQLのままだとすべての場所を満たさないと検索できません たとえば開始日~終了日だけなら絞込できません テキストを入力すると初めて絞込みをします ■たぶん たぶん下記SQL文にどちらかNULL値の場合をスルーさせる文章を追加させなければならないと思います WHERE (((B.番号)=[Forms]![Search]![テキスト]) AND ((B.D日付) Between [Forms]![Search]![txtDTPicker0] And [Forms]![Search]![txtDTPicker1])) ORDER BY B.D日付; わかる方よろしくお願いします

  • 他のプロジェクトの処理を待つ方法を教えて頂きたいのですが

    VB2008の初心者です。 以下のコ-ドのような、あるプロジェクトから複数のプロジェクトを 順次呼び出して処理をしたいと思っています。 '日付の入力 Dim proc As New Process() ListBox1.Items.Add(Format(Now, "HH.mm.ss") & "  *** ル-プチェック開始") proc.StartInfo.FileName = "G:\・・・・・・・・・・" 'Aプロジェクト proc.Start() ListBox1.Items.Add(Format(Now, "HH.mm.ss") & "  *** ル-プチェック終了") ListBox1.Items.Add(Format(Now, "HH.mm.ss") & "  *** ロ-レベルコ-ド付与開始") proc.StartInfo.FileName = "G:\・・・・・・・・・・" 'Bプロジェクト proc.Start() ListBox1.Items.Add(Format(Now, "HH.mm.ss") & "  *** ロ-レベルコ-ド付与終了") Aプロジェクトを呼び出して開始時間を表示するのですが、呼び出すと すぐに終了時間を表示してしまいます。 呼び出されるプロジェクトは、DBの更新だけでFormからの入力は無いと言う処理内容です。 Aプロジェクトが終了するまで、終了時間の表示を待つ方法を教えて頂きたいと思い、投稿しました。 よろしくお願いします。

  • 【PL/SQL】DATE型の時刻の表示と非表示

    PL/SQLでのDATE型の取扱いについて教えてください。 初期化パラメータNLS_DATE_FORMATが'YY-MM-DD'で、 ある列を'YYYY/MM/DD HH24:MI:SS'形式でDBにINSERTしたい場合、 dtWorkEndDate := to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS'); としてINSERTにdtWorkEndDateを用いると、 YY-MM-DD形式でDBに登録されてしまいます。 (dtWorkEndDateはDATE型。) ORACLEの設定かPL/SQLの問題なのかわからないのですが、 なにかアドバイスを頂けないでしょうか。 よろしくお願いします。

  • SQL文 日付

    VB6.0  ACCESS2000 Dim strToday As Date text1.text = 2002年12月1日 strToday = Format(Form1.Text1.Text, "yyyy/mm/dd") strSQL = "SELECT * From DAPT_生産指示 WHERE 予定作業開始日時 = strToday" & _ "ORDER BY 予定作業開始日時" として実行すると クエリ式の構文エラー:演算子がありません とでます。 よろしくお願いします。

  • SQL文の質問 JOINとORDERの組み合わせ

    現在下記にてSQLを作成しています ■わからないこと JOINでORDER(昇順)を設定するにはどうすればよいのでしょうか? 現在ではエラーが出ます(演算子がありません) mySQL = "SELECT B.B名, B.D番号 " & _ "FROM Bフレ INNER JOIN B ON B.D番号=Bコード.コード " & _ "WHERE(((B.日付)>=#" & orderDate & "#) AND ((B.日付)<=#" & shipDate & "#)) " & _ "GROUP BY Bコード.B名, B.D番号" & _ "ORDER BY B.D番号 ASC; わかる方ご教授願います

  • sql文の書き方

    いつもこちらで勉強させていただきます。 環境:mysql5.0 PHP5.1.4 apache 2.0.58 いま画面からパラメータ5受け取りました。 これをもってsql文を書こうとするが必須入力項目ではないため一つずつ判断して書いたら30種類の可能性がでてきてすごく長くなってしまいましたがなんか短縮させるいい方法はありませんか?またこれをファンクションで作り直そうとしたらちょっとうまくいかないのでどなたか教えてもらえませんか?ファンクションで渡すパラメータ($sql?$query?あるいは各パラメータですか? )は何にすればいいか?取得したい検索結果は配列です。ファンクション戻り値を連想配列にすることは可能ですか?ちょっと困っています。 $sql = "SELECT * FROM file_tbl WHERE"; // A だけの場合 if ( $b == "" and $c == "" and $d=="" and $e==""){ $sql = $sql." a='%s' order by b DESC,a"; $query = sprintf("$sql", mysql_real_escape_string($a)); // B だけの場合 }else if( $a == "" and $c == "" and $d=="" and $e==""){ $sql = $sql." b >='%s' order by b DESC,a"; $query = sprintf("$sql", mysql_real_escape_string($b)); // Cだけの場合 }else if( $a == "" and $b == "" and $d=="" and $e==""){ $sql = $sql." c <='%s' order by b DESC,a"; . . . // SQL クエリを実行する $result = mysql_query($query); よろしくご教授願います。

    • ベストアンサー
    • MySQL