日付を取扱う上で最も難しい部分は、登録しようとしている日付の形式が、 データベースのの日付の列の書式と一致するかを確認することです。
データが日付部分のみを含んでいる限り、クエリは期待通りに動作します。 しかし、時間部分が絡んでくると、複雑になってきます。
日付に対するクエリの複雑さを論じる前に、日付を操作するための最も重要な組み込み関数を見ていきます。
次のテーブルは、MySQL における最も重要な組み込み日付関数のリストです:
関数 | 説明 |
---|---|
NOW() | 現在の日付と時刻を返す |
CURDATE() | 現在の日付を返す |
CURTIME() | 現在の時刻を返す |
DATE() | 日付または日付/時刻式の一部を取出す |
EXTRACT() | 日付/時刻の一部を返す |
DATE_ADD() | 日付に指定した時間間隔を加算する |
DATE_SUB() | 日付から指定した時間間隔を減算する |
DATEDIFF() | 2 つの日付間の日数を返す |
DATE_FORMAT() | 各種フォーマットで日付/時刻を表示する |
次のテーブルは、SQL Server における最も重要な組み込み日付関数のリストです:
関数 | 説明 |
---|---|
GETDATE() | 現在の日付と時刻を返す |
DATEPART() | 日付/時刻の一部を返す |
DATEADD() | 日付から指定した時間間隔を加・減算する |
DATEDIFF() | 2つの日付間の時間数を返す |
CONVERT() | 各種フォーマットで日付/時刻を表示する |
MySQL には、データベースに日付または日付/時刻の値を格納するため、次のデータ型が備えられています:
SQL Server には、データベースに日付または日付/時刻の値を格納するため、次のデータ型が備えられています:
注: 日付型は、データベースに新しいテーブルを作成するときに、列に対して選択します!
使用可能なすべてのデータ型の概要については、 日付型リファレンスを参照してください。
次のような "Orders" テーブルがあったとします:
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
2 | Camembert Pierrot | 2008-11-09 |
3 | Mozzarella di Giovanni | 2008-11-11 |
4 | Mascarpone Fabioli | 2008-10-29 |
今、上記テーブルから "2008-11-11" の OrderDate を持つレコードを選択しようとした場合。
次の SELECT 文を使用します:
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
結果セットは次のようになります:
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
3 | Mozzarella di Giovanni | 2008-11-11 |
いま、"Orders" テーブルは以下であったとします("OrderDate" 列の時刻部分に注意してください):
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 13:23:44 |
2 | Camembert Pierrot | 2008-11-09 15:45:21 |
3 | Mozzarella di Giovanni | 2008-11-11 11:12:01 |
4 | Mascarpone Fabioli | 2008-10-29 14:56:59 |
上記のように、同じ SELECT 文を使用した場合:
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
何の結果も得られません!これは、クエリが時刻のない日付を検索しているためです。
チップ:シンプルでメンテナンスが容易なクエリにしたい場合は、日付の時間コンポーネントを使用しないでください!