SQL Date関数


SQL 日付(Dates)

Note日付を処理する際、最も難しい作業は、挿入する日付の形式を、データベース内の日付列の形式に一致させることでしょう。

データに日付部分だけが含まれているなら、クエリを実行しても問題は起こりません。しかし、時間部分が関係すると、状況は少し複雑になります。

日付クエリの複雑さを議論する前に、最も重要な組み込みの日付処理関数を見てみましょう。


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 日付処理

Note時間部分が関係しなければ、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 ステートメントを使用します:

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'

或

SELECT * FROM Orders WHERE OrderDate='2008-11-11 00:00:00'

結果は得られません!テーブルに "2008-11-11 00:00:00" という日付がないためです。時間部分がない場合、デフォルトの時刻は 00:00:00 です。

ヒント:クエリをシンプルで保守しやすくしたい場合は、日付に時間部分を使用しないでください!


その他の拡張