日付データ
SQLiteには型がありません。日付、時間や数値などを定義しても文字列情報として扱われます。
そこで入力の際に注意しなければならいことが出てきます。
以下では日付を例に説明します。
日付データを入力する
idとdate(日付)のシンプルなテーブルを作成します。型を指定していますがSQLiteでは文字列として扱われます。
CREATE TABLE date_tbl ( id INTEGER NOT NULL, date DATE PRIMARY KEY (id) )
| CID | 項目名 | 型名 | NOT NULL | 初期値 | キー |
| 0 | id | INTEGER | not null | PRIMARY | |
| 1 | date | DATE |
日付データの出力
1月から12月の10日を1行づつ挿入しました。以下にあるSELECT文を実行します。
SELECT * FROM date_tbl;
| id | date |
| 1 | 2003-1-10 |
| 2 | 2003-02-10 |
| 3 | 2003-03-10 |
| 4 | 2003-4-10 |
| 5 | 2003-05-10 |
| 6 | 2003-6-10 |
| 7 | 2003-07-10 |
| 8 | 2003-8-10 |
| 9 | 2003-09-10 |
| 10 | 2003-10-10 |
| 11 | 2003-11-10 |
| 12 | 2003-12-10 |
日付をキーにして並び替えを行います。
SELECT * FROM date_tbl ORDER BY date;
| id | date |
| 2 | 2003-02-10 |
| 3 | 2003-03-10 |
| 5 | 2003-05-10 |
| 7 | 2003-07-10 |
| 9 | 2003-09-10 |
| 1 | 2003-1-10 |
| 10 | 2003-10-10 |
| 11 | 2003-11-10 |
| 12 | 2003-12-10 |
| 4 | 2003-4-10 |
| 6 | 2003-6-10 |
| 8 | 2003-8-10 |
1・4・6・8月が後ろに来ています。
文字列としてソートされた為この様な結果となりました。
日付を挿入する際はフォーマットされた値を挿入する必要があります。
$date = sprintf("%4d-%02d-%02d",$year,$month,$day);
テーブルの値に直接タイムスタンプ値を入れるのも一つの方法かと思います。
$timestamp = mktime(0,0,0,$month,$day,$year);
