« 2007年05月30日 | メイン | 2007年06月01日 »
2007年05月31日
5月31日 やばいやばい
・データベース概論I
終わってる…。
・エージェントシステム
休講になった。
・ソフトウェア工学
デザインパターンの話が終わり、開発手法の話に入りました。配布資料は1部。
22:56 | コメント (0) | トラックバック | Class
XXXHOLiC シリーズ
久しぶりにマンガを一気読み。
・XXXHOLiC 1
・XXXHOLiC 2
・XXXHOLiC 3
・XXXHOLiC 4
・XXXHOLiC 5
・XXXHOLiC 6
・XXXHOLiC 7
・XXXHOLiC 8
・XXXHOLiC 9
・XXXHOLiC 10
・XXXHOLiC 11
CLAMP 作品です。僕は神社っ子なので、主人公に親近感があります。嘘です。僕にはアヤカシが見えないので、特に親近感はありません…。でも面白いですね。最新刊を読んでいないので、機会があれば呼んでみたいと思います。
XXXHOLiC と xxxHOLiC が混在してる…。
【関連情報】
・xXXHOLiC - Wikipedia
http://ja.wikipedia.org/wiki/XXXHOLiC
18:46 | コメント (2) | トラックバック | Memo
MySQL の DATETIME 型の日付の取り扱い
挿入日時を記録するために DATETIME 型を利用しているのですが、その日付の取り扱いに悩まされたので、書いてみる。
mysql> DESCRIBE hoge; +-------+----------+------+-----+---------------------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------------------+-------+ | id | int(11) | | | 0 | | | cdate | datetime | | | 0000-00-00 00:00:00 | | +-------+----------+------+-----+---------------------+-------+ 2 rows in set (0.00 sec)
上記のようなテストテーブルを作成しました。挿入データは INT, DATETIME のみです。
mysql> SELECT * FROM hoge; +----+---------------------+ | id | cdate | +----+---------------------+ | 0 | 2007-01-01 00:00:00 | | 1 | 2007-01-01 00:00:05 | +----+---------------------+ 2 rows in set (0.00 sec)
挿入したデータは、上記の2種類。時刻を 0 で埋めたものを埋めていないものです。
日付値を前提とする関数は、通常、日付時刻値を受け入れて、時刻部分を無視します。
ドキュメントには、前記のように書いていたので、以下のようなクエリを投げてみます。
mysql> SELECT * FROM hoge WHERE cdate = '2007-01-01'; +----+---------------------+ | id | cdate | +----+---------------------+ | 0 | 2007-01-01 00:00:00 | +----+---------------------+ 1 row in set (0.00 sec)
ドキュメントから読み取った予想としては、日付で比較するのだから 2 rows の結果が欲しかったのです。すなわち、すでに挿入されてるデータの cdate が 2007-01-01 と解釈されて欲しかった。でもそうじゃない。
mysql> SELECT * FROM hoge WHERE cdate >= '2007-01-01'; +----+---------------------+ | id | cdate | +----+---------------------+ | 0 | 2007-01-01 00:00:00 | | 1 | 2007-01-01 00:00:05 | +----+---------------------+ 2 rows in set (0.00 sec)
大なりイコールにすると 2 rows となるので、対象として与えた 2007-01-01 は、内部で 2007-01-01 00:00:00 と解釈されてる模様。
MySQL 4.1.20 を利用しているので、関数 DATE が利用できる。この関数は、まさに DATETIME 型を DATE 型に変換する関数です。
mysql> SELECT * FROM hoge WHERE DATE(cdate) = '2007-01-01'; +----+---------------------+ | id | cdate | +----+---------------------+ | 0 | 2007-01-01 00:00:00 | | 1 | 2007-01-01 00:00:05 | +----+---------------------+ 2 rows in set (0.00 sec)
期待通りの結果に!
うだうだ書いたわけですが、僕のドキュメントの読み間違いが原因です。「日付時刻値を受け入れて、時刻部分を無視します」の後者を読んで勘違いしたわけです。前者もきちんと読めと…。
ドキュメント解釈ミスが起こりうるので、テストをきちんとしようと再確認した出来事でした。
【関連情報】
・6.3.4. 日付と時刻関数 - MySQL 4.1 リファレンスマニュアル
http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-functions.html
14:31 | コメント (4) | トラックバック | Technology
中だるみ継続中…
まずい。ということで、昨日(30日)の食事内容です。

昼は、蕎麦を食べたくなったので蕎麦を食べてきました。花畑にそば坊があるのですが、遠いのでセンターのアイアイモールにある一成で。ランチタイムなので安く食べれたのですが、食べ過ぎました…。ざるそばだけにしても良かったかな。
眠い一日でした。睡眠は足りてるはずなんだけど。歩きすぎかな。そういえば、初めて mixi 内で論争に参戦しました。図書館におけるマナーの悪さが云々。正直、筑波大学図書館のマナーが悪いと思わない(不快に思ったことが無い)のですが、面白そうだったので。
一成 (昼)
小カツ丼, ざるそば