人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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



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


●質問者: tokyosmash
●カテゴリ:インターネット ウェブ制作
✍キーワード:MySQL SELECT SQL Today タイムスタンプ
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● nandedarou
●50ポイント ベストアンサー

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

SELECT * FROM schedule WHERE date < $today2;

でどうでしょうか?


2 ● nandedarou
●50ポイント

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

$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();" ;

も試してみて下さい。

◎質問者からの返答

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

これでできました!

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

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

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

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


3 ● kurukuru-neko
●80ポイント

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

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

◎質問者からの返答

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


4 ● chuken_kenkou
●25ポイント

日付は、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 日付と時刻関数

◎質問者からの返答

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ