TIMESTAMP型【TIMESTAMP type】
TIMESTAMP型とは?

データベースではDATE型が日付のみ、TIME型が時刻のみを扱うのに対し、TIMESTAMP型は日時を一体として保持する。実装によっては秒未満の小さな時間単位(ミリ秒やマイクロ秒など)まで格納できるものもある。MySQLやPostgreSQL、Oracle Databaseなど主要なRDBMSはいずれもTIMESTAMP型を備えているが、扱える範囲や精度、内部的な格納方式はシステムによって異なる。
レコードの作成日時や更新日時、あるいは、注文日時、ユーザー登録日時、ログの発生時刻など、「いつ」という情報が意味を持つ様々な場面で使われる。また、二つの日時の差から処理時間や経過日数を算出したり、特定期間内のデータを抽出したりする時刻計算にも利用される。
タイムゾーンの扱いは製品によって異なる。MySQLのTIMESTAMP型は値をUTC(協定世界時)で保存し、取得時にセッションのタイムゾーン設定に応じて変換して返す。PostgreSQLでは「TIMESTAMP WITH TIME ZONE」と「TIMESTAMP WITHOUT TIME ZONE」を区別している。国際的なサービスでは、地域ごとの時差を考慮した管理が必要となるため、タイムゾーン対応のTIMESTAMP型が用いられることが多い。
内部的にはUNIX時間(1970年1月1日0時0分0秒からの経過秒数)として格納される実装が多い。この方式では、符号付き32ビット整数の上限を超える2038年以降の日時を正しく扱えなくなる「2038年問題」が知られている。現在では64ビット整数への移行などにより対処が進んでいる。MySQLにはTIMESTAMP型に加えてDATETIME型も存在し、後者はこの制約を持たないため、より広い範囲の日時を扱える。
なお、SQL ServerのTIMESTAMP型は、任意の日付・時刻を格納するデータ型ではなく、行(レコード)のバージョン管理を行うためにシステム側が自動で更新時刻を格納するためのもので、利用者が値を記録することはできない。現在では「ROWVERSION」型に改名されているが、過去との互換性のために同義語として「TIMESTAMP」が用いられるため注意が必要である。