最速怪談選手権

検索がまずいのか、過去ログに見当たりませんでした。
よろしくお願いします。

以下を実行して、テーブルを作成したとします。

CREATE TABLE table_name (date1 date ,data varchar(20))

データを入力して、
date1 data
field1 2004-03-01 AAA
field2 2004-03-02 BBB
field3 2004-03-03 CCC
field4 2004-04-01 DDD

これから、3月に対応するフィールドだけを抽出する
クエリー文を教えてください。

SELECT * FROM table_name WHERE date1( 以下の文 )

実際のデータベースでは、月締め計算をしたいのです。
日付は、上記と同じ date 型です。
PHP+MySQLで動かしています。
POSTで実際に受け渡される値は、「2004-3」です。

A 回答 (5件)

即興なので微妙に違っているかもしれませんが、


以下の感じでどうでしょうか?

list($Year, $Month) = explode("-", "2004-3");

$Start = date("Y-m-d", mktime(0,0,0,$Month,0,$Year);

# 月末を求める
$Month++;
if($Month > 12){
 $Year++;
 $Month = 1;
}

$End = date("Y-m-d", mktime(0,0,0,$Month,0,$Year);

$Query = "select * from table_name where ";
$Query .= "date1 => $Start and date1 =< $End";
mysql_query($Query, $DBHandle);
    • good
    • 0
この回答へのお礼

目から鱗です、的確なアドバイスありがとうございます。
(目的をきちんと示せなかったので若干記述は異なりますが)
大筋では、ご指摘の方法で完璧に動きます。ほんとにありがとうございました、助かりました。

$tmp_date1 = '2004-3';

list ($year , $month ) = explode ("-","$tmp_date1");
$start = date("Y-m-d", mktime(0,0,0,$month,1,$year));
$end = date("Y-m-d", mktime(0,0,0,$month+1,1,$year));

$sql = "SELECT * FROM file_name
WHERE date >= '$start' AND date < '$end' " ;
mysql_query.....

お礼日時:2004/03/10 20:33

#3です。


whereの条件に。

$tmp_date1 = '2004-3';
list ($year , $month ) = explode ("-","$tmp_date1");
$sql = "select * from file_name where year(date)=$year and month(date)=$month";

この回答への補足

ポイントに関して:
上位の方を評価するのは気が引けますが、ポイント配給が規則になっていますので仕方がありません。
(また今回の解は甲乙つけがたいと思います。)
初心者に対してのアドバイスとしては#1
コーディングの効率という点では#4
美しさということでは、#5と思います。

で、GuruGuru22さんやVargasさんの回答はとてもすばらしいものでしたが、はやくアドバイスをいただけた順で評価を
させていただきました。あしからず。

皆様、ありがとうございました。

補足日時:2004/03/11 20:02
    • good
    • 0
この回答へのお礼

再びありがとうございます。
初心者にとって、視覚的に非常に理解しやすい記述なので、感心しております。
今動かしているシステムに書き入れました。
うまく動いています。ありがとうございました。

お礼日時:2004/03/11 12:33

#2です。

mysqlでやってみました。
select * from table_name where date_format(date1,'%Y-%c') = '2004-3';
これでいいみたいですね。to_dateは無いみたいですね。
フォーマット文字列もPostgresとは違う様です。
もし、入力月が2桁ならば、'%Y-%m'とすればいいみたいですね。
他にも色々やり方はありそうですよ。下記URL参照。

参考URL:http://www.mysql.gr.jp/
    • good
    • 0
この回答へのお礼

とても簡潔な記述で感激です。
カラム名を変数のようにして式に組み込めることを知りませんでした、勉強になります。慣れたら、このような記述が問い合わせにふさわしい表現ですね。

お礼日時:2004/03/11 12:28

MySQL のヴァージョンいくつか知りませんが


year と month って関数があります。

参考URL:http://www.mysql.gr.jp/jpdoc/3.23.x/manual.ja_Re …
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
MySQLは4.0.13、PHPは4.3.2を使用しています。
初心なので、関数があることは知っていますが、
このような場合、どのように利用できるのかよくわかりません。
よろしくお願いします。

お礼日時:2004/03/10 20:21

PHP+MySQL両方とも未経験ですが、Postgresならば、


select * from table_name where date1>=to_date('2004-3','YYYY-MM') and date1<to_date('2004-3','YYYY-MM')+interval '1 month';
で行けます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
まさに、そのような感じで記述して問い合わせを
したいと思っています。
同じ書式で書き込みましたが、だめでした。
Postgresと同じ書き方では動かないようです。
これと同じ意味で、MySQLで動く命令は無いものでしょうか。

お礼日時:2004/03/10 20:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!