WHERE句にて「30日前から今日まで」の設定方法

このQ&Aのポイント
  • 日付を変更せずに「30日前から今日まで」をWHERE句で設定する方法を教えてください。
  • エクセルのTODAY関数のように、日付を変更せずに「30日前から今日まで」をWHERE句で設定する方法を知りたいです。
  • GETDATE関数を使用して「30日前から今日まで」をWHERE句で設定しましたが、時間部分が現在の時間になってしまいます。0時0分0秒に設定する方法を教えてください。
回答を見る
  • ベストアンサー

WHERE句にて「30日前から今日まで」の設定方法

今まで、下記の通り記述していました。 WHERE M_DATE >= '2012-03-21 00:00:00.000' AND M_DATE <= '2012-04-20 23:59:59.000' 日付部分を毎回変更するのが面倒なので、エクセルのTODAY関数のようなものがないかと探したところ、GETDATE関数を見つけ、下記の通り変更してみました。 WHERE M_DATE >= dateadd(d,-30, getdate()) AND M_DATE <= getdate() しかし、時間部分が現在の時間になってしまうのですね。「今日まで」部分は、現在時刻で問題ないのですが、「30日前から」の部分は、0時0分0秒としたいのです。 どうしたらいいでしょうか? よろしくお願いします。

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

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

#23:59:59.000 だとミリ秒部分で漏れる可能性が。。。 getdate を 文字列型に変換し(cast または convert)、日付部分だけを切り出して(substring)、'23:59:59.999' を連結したらいいんじゃないでしょうか。 ~ AND M_DATE < 翌日の 00:00:00.000 の方が好ましい気がしますが。

関連するQ&A

  • WHERE句にて「30日前から今日まで」の設定方法

    WHERE句にて「30日前から今日まで」の設定方法 今まで、下記の通り記述していました。 WHERE M_DATE >= '2012-03-21 00:00:00.000' AND M_DATE <= '2012-04-20 23:59:59.000' 日付部分を毎回変更するのが面倒なので、エクセルのTODAY関数のようなものがないかと探したところ、GETDATE関数を見つけ、下記の通り変更してみました。 WHERE M_DATE >= dateadd(d,-30, getdate()) AND M_DATE <= getdate() しかし、時間部分が現在の時間になってしまうのですね。「今日まで」部分は、現在時刻で問題ないのですが、「30日前から」の部分は、0時0分0秒としたいのです。 どうしたらいいでしょうか? よろしくお願いします。

  • WHERE句かHAVING句の書き方

    こんにちは id|時間 A|19:00 A|09:00 B|16:00 C|18:00 のようなデータがあって、現在時刻が20:00とします idでグループ化したデータの時間の最大値が、現在時刻の3時間前 (今回は17:00)よりも前または等しいIDだけ抽出するためには どういう条件式を書けば良いか、ヒントを頂けますでしょうか 今回の例でいうと、結果には B|16:00 のみ出てくるということです WHEREやHAVINGを使って試行錯誤してはみたのですが、どうしても 例でいうところの A|09:00とB|16:00 が出てきてしまう始末です (条件にあう方のデータをとってしまい、除外にならない) IF文をうまいこと混ぜればいけるんでしょうか… コードは頑張って自分で作るので、考え方のヒントやこういうのを 使ってみるといいよ、といったアドバイスを頂けると助かります うまく質問の意図が伝わっているか不安ですが、ヨロシクお願いします mysql クライアントのバージョンは5.0.45です

    • ベストアンサー
    • MySQL
  • PHP埋め込みのMySQLでwhere句が上手くいかない

    PHPのモジュールにMySQLのSELECT文を埋め込み、 where句でデータベースからデータを読込もう としています。 ところが、下記select文のand以下が無視され、 where句で指示した通りの結果が出ません。 文法的におかしいのでしょうか? どなたかアドバイスいただければ幸いです。 条件などは下記の通りです。 環境: OS Fedora Core5 MySQL 5.0.27 PHP 5.1.6 select文 "SELECT * FROM wrma_tbl where mise_id = $mise_code and (enddate is NULL) or (enddate > $maedate)" select文の説明: (1)DBの支店id(mise_id)と入力された支店code(mise_code)が一致すること…これは問題ない (2)作業終了日付(enddate)がNULLはピックアップする (3)作業終了日付(enddate)が今日(dateで抽出、yyyy-mm-dd)から30日前(maedate←正規の関数で計算済み)以前をオミット

  • UPDATE文のWHERE句にファンクション使いたい

    [OSのVER]:WindowsXP [OracleのVER]:9i UPDATE時にWHERE句に自作のユーザ関数を使いたいと思っていますが、 更新されずに困っています。 (エラーも出ません) 例) update TG_TBL set S_YMD = '20060601', LAST_UPDATE = SYSDATE , where ID_NO = '1401001' and CHK_SIK(ID_NO) in (1,2) ←使用したいチェック関数 ちなみに、以下のように同じ関数を使用すると1件のレコードが検索されます。 select * from TG_TBL where KANRI_NO = '1401001' and CHK_SIK(ID_NO) in (1,2) 関数部分をコメントアウトして、実行すると1件更新されます。 UPDATE文にユーザ関数を使用することはできないのでしょうか? 皆様のお知恵をお貸しください。 よろしく、お願いいたします。

  • WHERE句内で「値=最大値」を取得する方法

    どのようなSQLを書けばよいのかわからないので質問させてください。 以下、MasterテーブルとDataテーブルがあります。 MasterテーブルとDataテーブルのレコードを結合して取得したいと思っています。 ただし、Dataテーブルのレコードはkey1,key2,key3でグループ化した中で最新の日付の レコードと結合したいと思っています。 以下のような取得結果を想定しているのですがどのようなSQLを書けばよろしいでしょうか。 ちなみに SELECT m.key1, m.key2, m.key3, m.type, m.name, d.date, d.value FROM test.master m, test.data d; where m.key1 = d.key1 and m.key2 = d.key2 and m.key3 = d.key3 and d.date = (select Max(date) from data group by key1, key2, key3) というSQLではエラーになってしまいました。 【取得結果】 key1 key2 key3 type  name      date         value -------------------------------------------------------------------------------------------------------------  1  2   3  11   name1  2016-12-17 12:00:00    30  4  5   6  22   name2  2016-12-18 12:00:00    30  7  8   9  33   name3  2016-12-19 12:00:00    30 両者とも主キーはkey1,key2,key3となります。 【Master】 key1 key2 key3 type  name ------------------------------------------------------------  1  2   3  11   name1  4  5   6  22   name2  7  8   9  33   name3 【Data】 key1 key2 key3      date       value ---------------------------------------------------------------------------------  1  2   3   2016-12-17 10:00:00    10  1  2   3   2016-12-17 11:00:00    20  1  2   3   2016-12-17 12:00:00    30  4  5   6   2016-12-18 10:00:00    10  4  5   6   2016-12-18 11:00:00    20  4  5   6   2016-12-18 12:00:00    30  7  8   9   2016-12-19 10:00:00    10  7  8   9   2016-12-19 11:00:00    20  7  8   9   2016-12-19 12:00:00    30

    • ベストアンサー
    • MySQL
  • SQL WHERE句 分岐?

    SQL Server 2005 を使っております。 WHERE句の分岐といいますか、記述の方法がわからないのですが、下記がその部分になります。 下記のコードを実行すると、都道府県、血液型、両方に何かしらのデータが入っているものしか抽出してきません。都道府県、血液型、どちらかの値がNullの場合でも、どちらかの条件が合致していれば、抽出したいのですが、どう記述すればよろしいでしょうか? 下記のコードが Null = Null を認識していれば このコードでも抽出してくるんでしょうが、 Null = Null だと抽出しないんですね。 何卒よろしくお願いいたします。 WHERE (IsNull(@A,dbo.テスト.都道府県) = dbo.テスト.都道府県) AND (IsNull(@B,dbo.テスト.血液型) = dbo.テスト.血液型

  • WHERE句の制限の有無について

    下記の様なWHERE句を使っていますが、注釈の部分を生かす 極端に時間がかかるようになってしまいます。 (注釈は他の行でも大丈夫です、2~3行殺せば早くなります) なにか制限でもあるのでしょうか? WHERE u.締日コード = @締日コード AND u.入庫日付 <= @終了日付 AND u.部門コード = isnull(@部門コード,u.部門コード) AND u.分類 in ('輸入','輸出') AND u.分類 = isnull(@分類,u.分類) AND u.仕訳コード = isnull(@仕訳コード,u.仕訳コード) AND u.商社 = isnull(@商社,u.商社) --下記を復活すると遅くなる(4秒→38秒) --AND u.保管河岸コード =isnull(@保管河岸コード,u.保管河岸コード) --AND u.品名コード =isnull(@品名コード,u.品名コード) AND ( u.在庫員数 <> 0 or ISNULL(a.当期出庫員数,0) <> 0 or ISNULL(b.出庫員数,0) <> 0 or u.在庫重量 <> 0 or ISNULL(a.当期出庫重量,0) <> 0 or ISNULL(b.出庫重量,0) <> 0 )

  • コマンドプロンプトを使用して時間の変更

    REM 日付の分解 set TODAY=%date% set y=%TODAY:~0,4% set m1=%TODAY:~5,1% set m2=%TODAY:~6,1% set d1=%TODAY:~8,1% set d2=%TODAY:~9,1% REM 入力要求 set /P chg_y="西暦を入力してください: " REM 西暦変更 date %chg_y%/%m1%%m2%/%d1%%d2% 現在ネットで拾った上記コマンドを使用してPCの日付の変更をしております。 これと同じように時間の部分を変更した場合どのようなコードを書けばいいでしょうか? 例 現在時刻 15:09 bat実行 変更した時間を2桁で入力してください。 16と入力してエンター押すと16:09になるようにしたい。

  • 日付型(時刻含む)を抽出条件にして行を抽出したい。

    はじめまして、よろしくお願いします。 現在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文でヒットするのですようです。 時刻が入ったらそのフィールドを抽出条件として使うことは無理なのでしょうか? 基本的な部分で勘違いしているのかもしれませんが なにかお気づきの点がありましたら、ご教授ください。

  • sql文のwhere句について

    <環境>sqlserver SQLでパラメータが空白であれば全件取得、パラメータに値が設定されている場合には 条件にHITするデータを抽出したいのですが、一本のクエリで抽出することができるのでしょうか? 空白時パラメータは以下のとおり入ってきます。 @no="" …完全一致 @name="%%" …部分一致 例) SELECT * FROM テーブル WHERE (NO = @no) and ((@name IS NULL) OR (@name IS NOT NULL) AND (NAME LIKE @name)) NAMEは上記クエリにて取得できています。 NOのところはどのようにすればよいでしょうか?