SQL 日付 関数

❮ 前章へ 次章へ ❯

SQL 日付

日付を取扱う上で最も難しい部分は、登録しようとしている日付の形式が、 データベースのの日付の列の書式と一致するかを確認することです。

データが日付部分のみを含んでいる限り、クエリは期待通りに動作します。 しかし、時間部分が絡んでくると、複雑になってきます。

日付に対するクエリの複雑さを論じる前に、日付を操作するための最も重要な組み込み関数を見ていきます。


MySQL 日付関数

次のテーブルは、MySQL における最も重要な組み込み日付関数のリストです:

関数 説明
NOW() 現在の日付と時刻を返す
CURDATE() 現在の日付を返す
CURTIME() 現在の時刻を返す
DATE() 日付または日付/時刻式の一部を取出す
EXTRACT() 日付/時刻の一部を返す
DATE_ADD() 日付に指定した時間間隔を加算する
DATE_SUB() 日付から指定した時間間隔を減算する
DATEDIFF() 2 つの日付間の日数を返す
DATE_FORMAT() 各種フォーマットで日付/時刻を表示する

SQL Server 日付関数

次のテーブルは、SQL Server における最も重要な組み込み日付関数のリストです:

関数 説明
GETDATE() 現在の日付と時刻を返す
DATEPART() 日付/時刻の一部を返す
DATEADD() 日付から指定した時間間隔を加・減算する
DATEDIFF() 2つの日付間の時間数を返す
CONVERT() 各種フォーマットで日付/時刻を表示する

SQL 日付データ型

MySQL には、データベースに日付または日付/時刻の値を格納するため、次のデータ型が備えられています:

SQL Server には、データベースに日付または日付/時刻の値を格納するため、次のデータ型が備えられています:

注: 日付型は、データベースに新しいテーブルを作成するときに、列に対して選択します!

使用可能なすべてのデータ型の概要については、 日付型リファレンスを参照してください。


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

今、上記テーブルから "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'

何の結果も得られません!これは、クエリが時刻のない日付を検索しているためです。

チップ:シンプルでメンテナンスが容易なクエリにしたい場合は、日付の時間コンポーネントを使用しないでください!


❮ 前章へ 次章へ ❯