SQL Date関数
SQL 日付(Dates)
日付を処理する際、最も難しい作業は、挿入する日付の形式を、データベース内の日付列の形式に一致させることでしょう。
データに日付部分だけが含まれているなら、クエリを実行しても問題は起こりません。しかし、時間部分が関係すると、状況は少し複雑になります。
日付クエリの複雑さを議論する前に、最も重要な組み込みの日付処理関数を見てみましょう。
MySQL Date 関数
次の表は、MySQL で最も重要な組み込みの日付関数を示しています:
| 関数 | 説明 |
|---|---|
| NOW() | 現在の日付と時刻を返す |
| CURDATE() | 現在の日付を返す |
| CURTIME() | 現在の時刻を返す |
| DATE() | 日付または日付/時刻式の日付部分を抽出する |
| EXTRACT() | 日付/時刻の個々の部分を返す |
| DATE_ADD() | 日付に指定した時間間隔を追加する |
| DATE_SUB() | 日付から指定した時間間隔を減算する |
| DATEDIFF() | 2つの日付の間の日数を返す |
| DATE_FORMAT() | 異なる形式で日付/時刻を表示する |
SQL Server Date 関数
次の表は、SQL Server で最も重要な組み込みの日付関数を示しています:
| 関数 | 説明 |
|---|---|
| GETDATE() | 現在の日付と時刻を返す |
| DATEPART() | 日付/時刻の個々の部分を返す |
| DATEADD() | 日付に指定した時間間隔を追加または減算する |
| DATEDIFF() | 2つの日付の間の時間を返す |
| CONVERT() | 異なる形式で日付/時刻を表示する |
SQL Date データ型
MySQL次のデータ型を使用して、データベースに日付または日付/時刻の値を格納します:
- DATE - 形式:YYYY-MM-DD
- DATETIME - 形式:YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 形式:YYYY-MM-DD HH:MM:SS
- YEAR - 形式:YYYY または YY
SQL Server次のデータ型を使用して、データベースに日付または日付/時刻の値を格納します:
- DATE - 形式:YYYY-MM-DD
- DATETIME - 形式:YYYY-MM-DD HH:MM:SS
- SMALLDATETIME - 形式:YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 形式:一意の数値
注:データベースに新しいテーブルを作成するときは、列にデータ型を選択する必要があります!
利用可能なすべてのデータ型については、完全なデータ型リファレンスマニュアル。
SQL 日付処理
時間部分が関係しなければ、2つの日付を簡単に比較できます!
次のような "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 |
ここで、上のテーブルから OrderDate が "2008-11-11" のレコードを選択したいとします。
次の SELECT ステートメントを使用します:
結果セットは次のようになります:
| 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' 或 SELECT * FROM Orders WHERE OrderDate='2008-11-11 00:00:00'
結果は得られません!テーブルに "2008-11-11 00:00:00" という日付がないためです。時間部分がない場合、デフォルトの時刻は 00:00:00 です。
ヒント:クエリをシンプルで保守しやすくしたい場合は、日付に時間部分を使用しないでください!
その他の拡張