• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WHERE句にて「30日前から今日まで」の設定方法)

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

Siegruneの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

convert(char(23),convert(datetime,convert(char(8), dateadd(d,-30, getdate()),112),112),121) と比較してみては? ※1 convert(char(8),getdate(),112) で、'20120321'にして、 ※2 convert(datetime,※1,112) で日付型に戻す。 M_DATE が日付型ならこれで比較すればいいでしょうけど。 ※3 convert(char(23),※2,121) で'2012-03-21 00:00:00.000'の形の文字列に戻す。 (未検証ですが。)

rko910
質問者

お礼

速やかなご回答、誠にありがとうございました。 上記の方のやり方でうまくいきましたが、convert関数やcharについては、Siegruneさんに教えていただいてから、調べてみていたので、上記の方法もすんなり理解できました。 本当にありがとうございました!

関連するQ&A

  • 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秒としたいのです。 どうしたらいいでしょうか? よろしくお願いします。

  • 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←正規の関数で計算済み)以前をオミット

  • WHERE句の中でCASE句

    区分が1の時にステータス0,1,2のもの、区分が1以外の場合はステータス0,1のものを抽出、というSQLを書きたいのですが、 WHERE句の中に (CASE Kbn WHEN '1' THEN Status in('0','1','2') ELSE Status in('0','1') END) とするとエラーとなりました。 このような場合、WHERE句の中にCASE句で実現は不可能でしょうか? 一応以下のようにすれば期待通りの内容が抽出できるのですが、美しくないなあと。 ((Kbn = '1' AND Status in('0','1','2')) OR (Kbn != '1' AND Status in('0','1'))) 何か他にいい手がありますでしょうか。

  • WHERE句でのデータ型について

    お願い致します。 ORACLEのWHERE句に対する疑問点ですが、 カレンダを管理するテーブル(カレンダマスタ)において、条件を指定してデータをSELECTする時にWHERE句に記入するデータ型についてご指導お願いします。 <詳細> 目的としてカレンダマスタよりSYSDATEの年月の休みの日を除く、稼動日数(COUNT)を求めるのが、目的です。 自分で作成した、SQLでは目的を果たしているのですが、WHERE句にTO_CHARを使用し、抽出項目(年月日-DATE型)を指定しているのですが、条件を指定する時は、TO_CHARで指定しても問題は無いのでしょうか? <SQL> SELECT COUNT(TO_NUMBER(休みFLG)) AS 稼動日 FROM カレンダマスタ WHERE 年月日 BETWEEN (TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-1))+1,'YYYY/MM/DD')) AND (TO_CHAR(LAST_DAY(SYSDATE),'YYYY/MM/DD')) AND 休みFLG='0' <補足> 休みFLG='0'は稼動日

  • 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文にユーザ関数を使用することはできないのでしょうか? 皆様のお知恵をお貸しください。 よろしく、お願いいたします。

  • SQL WHERE句 分岐?

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

  • SQLのWHERE句を条件によって追加したい

    SQLのWHERE句にパラメータで渡された値がnullでない場合は条件に 含めるようにしたいのですが、書き方が分かりません。 CASEを使って書いてもエラーになってしまいます。 SELECT 項目1 ,項目2 FROM テーブル WHERE 条件1 = パラメータ1 AND 条件2 = パラメータ2 -- パラメータ3がnullでない場合は下記条件を付けたい AND 条件3 = パラメータ3 使っているのはpostgresqlです。 よろしくお願いします。

  • WHERE句で、今日以降の日付だけを表示

    PHP+MySQLでテーブルを作成しています。 今日の日付のものは下記の文で表示させています。 SELECT * FROM table WHERE date = date(now()); 同じように、明日以降のもの全てを表示させたいのですが、 BETWEENで日付を設定しなければならないのでしょうか? BETWEENは長くなるので、すっきりさせたいと思い探してはみたのですが、 BETWEENばかりで、質問の方させていただきました。

    • ベストアンサー
    • PHP
  • WHERE句の条件の記述の順序

    PRIMARY KEYとINDEXがテーブルに設定されている場合、 検索条件に記述する順番はどのようになるのでしょうか? 下記のテーブルがあり、SELECT文をつくろうと 考えています。 テーブル:foo 項目  PRIMARY KEY  INDEX ----------------------------------- a 1 b 2 1 c 3 d 2 (1)PRIMARY KEYを優先してWHERE句の順番を決める↓ SELECT * FROM foo WHERE a = "AAA" AND b = "BBB" AND c = "CCC" AND d = "DDD" (2) それともINDEXが設定されている項目を先に記述する↓ SELECT * FROM foo WHERE b = "BBB" AND d = "DDD"   AND a = "AAA" AND c = "CCC" (1)と(2)ではどちらの性能がよいのでしょうか?

  • 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 )