• ベストアンサー

SELECT の仕方 (今月のデータを取り出す)

SELECT ○○ FROM ×× WHERE date = 今月分 と言った感じで、今月挿入されたデータを取り出したいのですが、良い方法はありませんか。 select date_format(now(), '%m') か何かを組み合わせれば良いのかと試しましたが、うまくいきませんでした。(文法のミスかもしれません) よろしくお願いします。

  • MySQL
  • 回答数2
  • ありがとう数4

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

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

すみません、PHPのカテゴリの質問と勘違いしてPHPである前提で答えちゃいました。 dateがdateもしくはdatetime計だとしたらmonth(date)で月が取り出せます。ですから month(date) = month(now())で今月をヒットさせる事ができます。これだけだと去年、一昨年の今月にヒットしてしまいますので、年のチェックも必要になりますね。 もし「今月」に限定されるのであれば、考え方を変えて「今月1日以降のデータ」で良い訳ですよね?となるとdate >= date_format(now(),'%Y-%m-01') でもいけるんじゃないでしょうか。

imo_05
質問者

お礼

どちらの方法もうまくいきました。 助かりました、ありがとうございまいした。

その他の回答 (1)

回答No.1

フィールドdateはdateもしくはdatetime型ですか?だとしたら今月が2005/05だとすると date >= '2005/05/01' and date < '2005/06/01' というSQLになると思います。今月1日や来月1日の求め方はPHPで date('Y/m/d',mktime(0,0,0,date('m'),1,date('Y'))) date('Y/m/d',mktime(0,0,0,date('m')+1,1,date('Y'))) (括弧の数合ってるかな?(^^;)てな感じで求められると思います。 うちでは日付関係は全部タイムスタンプの数値にしてint型で持っています。そうするとこういう日付の計算がすごく楽ですし、データの容量も少なくて済みます。

関連するQ&A

  • 一部データを除外するSQL

    SQL(MySQL)についての質問です。 顧客データの中からある月の誕生日のデータを抽出しようと考えています。 6月生まれだったら、 SELECT * FROM customer WHERE DATE_FORMAT(birthday, '%m')= 6; 12月生まれだったら SELECT * FROM customer WHERE DATE_FORMAT(birthday, '%m')= 12; でできるんですが、実は顧客データの中には誕生日がわからない人がいて、 その場合「1900-01-01」をセットしています。 ですので、1月生まれを指定する SELECT * FROM customer WHERE DATE_FORMAT(birthday, '%m')= 1; とすると誕生日が「1900-01-01」の人も含まれてしまいます。 誕生日「1900-01-01」のデータを排除するSQLがわからなくて困っています。 NOT IN とか EXCEPT とか使ってみたんですがうまくいきませんでした。 どなたか教えて頂けると大変うれしいです。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • このぐるぐるSQLクエリまとまりますか?

    ピボット集計の理解が難しくて難儀してます このような予定表を作るのですが毎月ごとに集計してやるのに 4回問い合わせております。一回でえいやっと投げるにはどう記述しましょう? mysql 5.0です -- 今月 -- SELECT 商品番号,sum(受注金額) FROM 注文受付テーブル where DATE_FORMAT(納入日, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m') group by 商品番号; -- 来月 -- SELECT 商品番号,sum(受注金額) FROM 注文受付テーブル where DATE_FORMAT(納入日, '%Y%m') = DATE_FORMAT(NOW()+ INTERVAL 1 MONTH, '%Y%m') group by 商品番号; -- 再来月 -- SELECT 商品番号,sum(受注金額) FROM 注文受付テーブル where DATE_FORMAT(納入日, '%Y%m') = DATE_FORMAT(NOW()+ INTERVAL 2 MONTH, '%Y%m') group by 商品番号; -- ささらい月 -- SELECT 商品番号,sum(受注金額) FROM 注文受付テーブル where DATE_FORMAT(納入日, '%Y%m') = DATE_FORMAT(NOW()+ INTERVAL 3 MONTH, '%Y%m') group by 商品番号;

  • SQLでSELECTの中でSELECT文を作りたいのですが。

    開発環境 VB6 WINXP  SQLで、次のそれぞれの文((1)、(2))は問題なく動作しますが、これを合体させて、絞り込むにはどうしたら良いのでしょうか。 (1) strSQLM = "SELECT * FROM 漁獲DATA WHERE 日付 =#" & Format(PickedDate, "m-d-yy") & "#" (2) strSQLM = "SELECT * FROM 漁獲DATA WHERE 順位 =" & Meigara つまり同一の日の同じ順位のデータを調べたいのですが。よろしくお願いします。

  • mysqlで年と月を別々のカラムに収納しています

    mysql5.1を利用してデータベースを作成しています。 テーブルに年と月を別々で収納しているのですが、 そのテーブルの中のデータから「今月を過ぎていなければ」という条件で抽出したいのですが、 SQLの書き方がわかりません。 私のSQLの基礎の基礎しか教えてもらっておらず、 あとは独学で、現在のレベルはようやく少しサブクエリを書き出した(学びだした)レベルです。 しかもwindows上のNavicat Lite(アプリ)上で書いてる状態です。 自分のイメージ的には下記のような感じなのですが、動きません。 どなたか教えていただけないでしょうか。 よろしくお願いします。 hoge_tblテーブルからBカラムが'hoge'かつ、 hoge_tblテーブル内のYEARカラムとMONTHカラムの値を今月と比較して、 「今月を過ぎていなければ」といった条件を付けたいと考えております。 select A from hoge_tbl where B = 'hoge' and (select date_format(now(),'%Y%m') as NOW) < (select date_format('(select YEAR,MONTH from hoge_tbl )’,'%Y%m') as END)

    • ベストアンサー
    • MySQL
  • select文について

    現在、"user"というテーブルに"id"と"date(datetime)"という項目があり、その"date"にあるデータの中から月を指定して抽出したくて以下ようなSQL文を書いたのですがうまくいきません。 SELECT `id` FROM `user` WHERE convert((SELECT extract(month from `date`) FROM `user`), INTEGER) = 9 mysql5.0です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 日付だけを見てデータをSELECTしたい

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

    • ベストアンサー
    • MySQL
  • SELECT文でこんなことはできるでしょうか?

    例えば、日付別の売上のリストを作る場合に SELECT date,SUM(kingaku) AS goukei FROM uriage WHERE date BETWEEN '2007/01/01' AND '2007/01/31' GROUP BY date ORDER BY date を発行して, date goukei 2007/01/01 10000 2007/01/03 20000 2007/01/04 30000 2007/01/06 20000 2007/01/07 40000 2007/01/08 50000 ・・・ を取得したとして、 これを date goukei 2007/01/01 10000 2007/01/02 0 2007/01/03 20000 2007/01/04 30000 2007/01/05 0 2007/01/06 20000 2007/01/07 40000 2007/01/08 50000 ・・・ というように、データが1件もない日付も 間にはさむ方法はあるでしょうか? 以上、よろしくお願いします。

  • SELECTした結果をSELECTしたい!

    初めて利用させていただきます。 -miru-と申します。 現在、 RDBMS:IBM DB2 7.2 OS:Windows 2000 なのですが、 タイトルの通り、 SELECT結果がSELECTできず困っています。 やりたい事の概要 YMD_DATAはDATE型です。 1. SELECT YMD_DATA FROM TEST.TEST_TABLE WHERE YMD_DATA < '2004-10-15' AND FLAG = '1' ORDER BY YMD_DATA DESC FETCH FIRST 30 ROWS ONLY でFLAGが1且つ指定した年月日以前のデータを 新しいものから30件取得 2. 1で取得した結果の一番古い年月日(30個目のデータ)を  取得 と、いう感じなのですが、どうもうまくいきません。。 1つのSQLで書きたいのですが、これは可能でしょうか? 分かる方がいらっしゃいましたら、 ご教授お願いいたします。 失礼します。

  • ループの仕方

    select文で、まずデータが何件あるかカウントしたあと、 そのカウントした数の分だけ、ループしたいです。 ループに入れ込みたいSQLは以下のような感じです。 1.select 1a,1b from TABLE1 where 条件; 2.select 2a,2b from TABLE2 where 条件; カウントした数の受け渡しとかも、分からないような状態なのですが、 初心者向けに教えていただけないでしょうか。 宜しくお願いします。

  • MySQLでTIMESTAMP型の列から現在日付の1週間以内のデータ検索をSQL文で

    タイトルの通りですが、MySQLのSELECT文についてです。 以下のようなテーブルがあったとします。 MEMBER{ ID SMALLINT M_DATE TIMESTAMP} このテーブルのM_DATEが現在の日付から一週間以内であるレコードの検索を以下のようなSQL文で実行しました。 SELECT * FROM MEMBER WHERE M_DATE BETWEEN (NOW() - 00000000070000) AND NOW(); 最初はこれでOKだと思っていたのですが、月をまたいだりした時に抽出されるべきではないレコードが表示されるので間違いに気付いたのですが、どう修正すべきなのか分からない状況です。 どなたか良い方法があれば、教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • MySQL