質問内容「日付けの比較」


MySQL(4.1) MySQL暦1ヶ月

以下のテーブルがあります。

テーブル名 schedule
フィールド date text 他多数

dateにはY-m-d形式で日付を入れています。(2007-03-21)

****実行したい事**********************************
今日より先の日付がdateに入っているレコードを取得したいです。
**************************************************


1)Y-m-d形式での比較
2)タイムスタンプ形式での比較


とりあえず1)をやってみました。

$today = strtotime ("now");
$today2 = date("Y-m-d",$today);


SELECT * FROM schedule WHERE $today2 < 'date'

これだと正常に比較されていません。
Y-m-d形式は比較できないのでしょうか。


2)にチャレンジ

タイムスタンプでの比較が確実だと思うのですが、上記SQLでdateをタイムスタンプ形式に変換して$todayと比較させる書き方がわかりません。


1)でも2)でも正常に比較できればいいです。正確な方法を教えてください。

ちなみにこちらを参考にしています。
http://sandman.s6.xrea.com/nucleus/item-56.html



それではみなさんよろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/03/17 09:04:53
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:nandedarou No.1

回答回数230ベストアンサー獲得回数34

ポイント50pt

$today2に"Y-m-d"形式で日付が入っている場合のSQL

SELECT * FROM schedule WHERE date < $today2;

でどうでしょうか?

その他の回答3件)

id:nandedarou No.1

回答回数230ベストアンサー獲得回数34ここでベストアンサー

ポイント50pt

$today2に"Y-m-d"形式で日付が入っている場合のSQL

SELECT * FROM schedule WHERE date < $today2;

でどうでしょうか?

id:nandedarou No.2

回答回数230ベストアンサー獲得回数34

ポイント50pt

先程の私の回答、全体を""で囲めばなんとかなるかも知れませんが、次の方がいいです。

$sql = sprintf( "SELECT * FROM schedule WHERE date < '%s';", $today2 );

また、今日の日付は、current_dateでMySQLから取得できます($today2は、不要)。なので、次でもいいと思います。

$sql = "SELECT * FROM schedule WHERE date < current_date;" ;

※(今実験できないので、)上記でだめなら、

$sql = "SELECT * FROM schedule WHERE date < current_date();" ;

も試してみて下さい。

id:tokyosmash

$sql = "SELECT * FROM schedule WHERE date < current_date" ;

これでできました!

dateを'date'にしてたのが間違いだったみたいですね。

PHPとMySQLの関数はそれぞれ違うんだ、という事をきちんと認識しなければなりませんね。。

ちょっと混乱していますが一応できました。

毎度ありがとうございます。

2007/03/17 02:34:55
id:kurukuru-neko No.3

回答回数1844ベストアンサー獲得回数155

ポイント80pt

未来のスケジュールを検索

select * from schedule where cast(date as date)> now()

id:tokyosmash

下のコメント欄の「1週間後」ですができました!ありがとうございます。

2007/03/17 06:29:49
id:chuken_kenkou No.4

回答回数722ベストアンサー獲得回数54

ポイント25pt

日付は、MySQLのdate型を使っていますか?

date型を使うことで、日付演算などをMySQLの機能で簡単に行えます。

また、今日の日付や日時も、MySQLで拾えますけど?

>SELECT * FROM schedule WHERE $today2 < 'date'

列名「date」を、「'」(アポストロフィ)で括ってますよね?

これでは、文字定数として扱われます。

予約語と重なる表名や列名を使う場合は、「`」(バッククォート)で括ります。


表定義例

create table `schedule`
(c1          int,
 c2          int,
`date`       date);

検索例1

select * from `schedule` where `date`>'2007-03-16'

検索例2

select * from `schedule` where `date`>curdate()

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.3.4 日付と時刻関数

id:tokyosmash

date型を使っているつもりです。

フィールドもdate型にしました。

ただ、フィールド名にdateを使ったのはまずかったですね。予約語?に引っかかるのでしょうか。

それから''で囲むと文字列になってしまう点も勉強になりました。基本的なところをきちんと勉強しなければ先に進めないですね。

2007/03/17 02:40:26
  • id:nandedarou
    たぶん、符号の向きを逆にしてしまいました。
    私の作ったSQL文の「<」をすべて、「 >」に変更お願いします。
  • id:tokyosmash
    実は質問文に「今日から1週間後まで」という条件の場合のSQL文も尋ねたかったのですが最大文字数をオーバーして消してしまいました。
    この場合はどうすればいいのでしょうか?
    もしお手数でなければどなたか教えて頂きたいです!
  • id:kurukuru-neko

    6.3.4. 日付と時刻関数
    過去 30 日以内の日付
    http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-functions.html

    条件は、本日を除く、以後7日間だと
    where `date`>curdate()
    の条件に and条件
    where
    ( `date` > curdate() )
    and
    (`date` <= ADDDATE(CURRENT_DATE,INTERVAL 7 DAY))


    ※:スケジュールを検索する場合、curdate
    以降のスケジュールになるので当日分は
    除外されてしまします。
    人によりますがスケジュールはずれたり
    忘れたり、自分以外の人が確認する場合
    もあるので当日分又は、現在時刻-8時間位
    は検索指定できた方が便利かも



この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません