今回はSQLのデータ型のうち、「日付型」と「時刻型」の基本的な内容について説明します。
日付型や時刻型のデータは、日常生活においても、オンラインショップの購買履歴やホテルの予約システム、ニュース記事の更新日などで使われており、とても身近なデータ型のひとつです。
SQLの日付型ではdate
、時刻型ではtime
が使われるほか、日付時刻型としてdatetime
やtimestamp
も存在します。
この記事では、日付型・時刻型の基本やフォーマットの概念、そして応用的な現在日付を取得する方法について説明します。
日付型・時刻型の基本
この章では、日付・時刻型とはなにか、SQLの日付・時刻型の種類など、まずは基本内容について説明します。前述の通り、日付・時刻型は日常生活においても身近なデータ型です。
日付型・時刻型とはなにか
日付型とは、年月日を扱うデータ型です。日付型の一般的な表記法はyyyy/mm/ddであり、さまざまな用途で使われています。
もう一方の時刻型は、時刻を扱うデータ型です。時刻型の一般的な表記法はhh:mm:ssであり、時:分:秒の順番で表されます。
どちらも、数値としての要素も持っており、加減算や大小比較も可能です。
また、日付・時刻型はSQLのみではなく、Excelや各種プログラミング言語でも使われている基本的な概念です。
日付型・時刻型の種類
日付・時刻型は、日付型、時刻型、日付時刻型に分類されます。
SQLでは、date
(日付型)、time
(時刻型)、datetime
(日付時刻型)、datetime2
(日付時刻型)、timestamp
(日付時刻型)など、目的に応じた複数の種類が存在するため、用途に応じた適切なデータ型を選択する必要があります。
データベースの基本設計を行う際には、各日付・時刻型の特徴、扱える数値の範囲などは把握しておきましょう。
データ型名 | 説明 |
---|---|
DATE | 日付のみ格納する。通常は、yyyy-mm-dd |
TIME | 時刻のみ格納する。通常は、hh:mm:ss |
DATETIME | 日付と時刻を格納する。通常は、yyyy-mm-dd hh:mm:ss |
DATETIME2 | 日付と時刻を格納する。通常は、yyyy-mm-dd hh:mm:ss.sssssss(精度はナノ秒) |
TIMESTAMP | 一意のタイムスタンプを格納する。データ形式は、RDBMSによって異なる |
日付型・時刻型のフォーマット
SQLにおける日付型(DATE)と時刻型(TIME)のデータは、データベースに格納される時点では、それぞれのRDBMSのフォーマットに基づきます。通常、フォーマットは国際的な標準形式に準拠しています。
たとえば、日付型は「YYYY-MM-DD」、時刻型は「HH:MM:SS」の形式で保存されることが多いです。
一方で、日付や時刻データを抽出する際には、さまざまな用途に応じたフォーマットで表示する必要があります。SQLでは、クエリを実行する際に、日付や時刻のフォーマットを動的に指定することが可能です。
例として、DATE_FORMAT()
(MySQL)、TO_CHAR()
(PostgreSQL)、FORMAT()
(SQL Server)などの関数を使用して、抽出データのフォーマットを指定することが可能です。
関数を使用することで、データベースから取得した日付や時刻を、任意の形式で表示することができます。
現在日付の取得など応用的使用例
この章では、SQLの関数を使って、現在日付を取得する方法や日付・時刻間の差の計算、日付・時刻の加算と減算など、応用的な使用例について紹介します。
現在日付・時刻の取得
SQLで現在の日付や時刻を取得するには、CURRENT_DATE
、CURRENT_TIME
、CURRENT_TIMESTAMP
などの関数を使用します。この関数は、クエリが実行された時点の日付や時刻を返します。
たとえば、下記のSQL文は、現在の日付と時刻を取得します。
SELECT CURRENT_DATE AS Today, CURRENT_TIME AS Now;
日付間・時刻間の差の計算
SQLの関数は、日付や時刻のデータ間の差を計算することも可能です。特定のイベントからの経過時間を計算したり、2つの日付間の日数を求めたりすることができます。
たとえば、下記のSQL文は、2つの日付間の日数の差を計算します。
SELECT DATEDIFF('2024-12-31', '2024-01-01') AS DaysBetween;
日付・時刻の加算と減算
SQLでは、日付や時刻に対して、特定の期間を加算または減算することも可能です。未来または過去の日付や時刻を計算することができます。
たとえば、下記のSQL文は、現在の日付から30日後の日付を計算します。
SELECT CURRENT_DATE + INTERVAL '30 days' AS FutureDate;
あとがき
今回は、SQLの日付型、時刻型、日付時刻型について、基本的な内容と現在時刻を取得するための応用例などを紹介しました。
日付型、時刻型の種類については、他のデータ型よりもシンプルで、ニーズに適したデータ型名を選びやすい特徴があります。具体的に、どのような日付・時刻データが必要なのか、データベース設計の段階でしっかりと検討しておきましょう。
なお、データベース実運営においては、日付データや時刻データを変換する必要性が高いのですが、今回の記事では触れていません。変換の方法や具体例については、次回の記事で説明します。