日付を扱うSQL
SQLの日付
日付を扱うときに最も難しいのは、挿入しようとしている日付の形式がデータベースの日付列の形式と一致していることを確認することです。
データに日付部分のみが含まれている限り、クエリは期待どおりに機能します。ただし、時間の部分が含まれる場合は、さらに複雑になります。
SQL 日付データ型
MySQLには、データベースに日付または日付/時刻の値を格納するための次のデータ型が付属しています。
-
DATE
- YYYY-MM-DD 形式 -
DATETIME
- 形式: YYYY-MM-DD HH:MI:SS TIMESTAMP
- 形式: YYYY-MM-DD HH:MI:SS-
YEAR
- YYYY または YY の形式
SQLServerには、データベースに日付または日付/時刻の値を格納するための次のデータ型が付属しています。
-
DATE
- YYYY-MM-DD形式 -
DATETIME
- 形式: YYYY-MM-DD HH:MI:SS -
SMALLDATETIME
- 形式: YYYY-MM-DD HH:MI:SS TIMESTAMP
- 形式: 一意の番号
注:日付の種類は、データベースに新しいテーブルを作成するときにカラムに選択されます!
SQL 日付の操作
次の表を見てください。
注文表
オーダーID | 商品名 | 注文日 |
---|---|---|
1 | ヤギ乳チーズ | 2008-11-11 |
2 | カマンベールピエロ | 2008-11-09 |
3 | ジョンのモッツァレラ | 2008-11-11 |
4 | マスカルポーネ・ファビオリ | 2008-10-29 |
次に、上のテーブルからOrderDateが「2008-11-11」のレコードを選択します。
以下を使用しますSELECT
文
<div>SELECT * FROM Orders WHERE OrderDate='2008-11-11'</div>
結果セットは次のようになります。
オーダーID | 商品名 | 注文日 |
---|---|---|
1 | ヤギ乳チーズ | 2008-11-11 |
3 | ジョンのモッツァレラ | 2008-11-11 |
注:時間要素が含まれていなければ、2つの日付を簡単に比較できます。
ここで、"Orders"テーブルが次のようになっているとします ("OrderDate"列に時間コンポーネントが追加されていることに注意してください)。
オーダーID | 商品名 | 注文日 |
---|---|---|
1 | ヤギ乳チーズ | 2008-11-11 13:23:44 |
2 | カマンベールピエロ | 2008-11-09 15:45:21 |
3 | ジョンのモッツァレラ | 2008-11-11 11:12:01 |
4 | マスカルポーネ・ファビオリ | 2008-10-29 14:56:59 |
上記と同じSELECT
文を使う場合:
<div>SELECT * FROM Orders WHERE OrderDate='2008-11-11'</div>
結果は得られません!これは、クエリが時間部分のない日付のみを検索しているためです。
ヒント:クエリを単純にして維持しやすくするために、必要でない限り、日付に時間コンポーネントを使用しないでください。
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。