SQL TIMESTAMPとDATEをSequelize DATEとDATEONLYに変換する

TIMESTAMP、DATETIME、DATE、TIMEなどのSQL日付・時刻型がSequelizeのDataTypes.DATE、DataTypes.DATEONLY、DataTypes.TIMEにどのようにマッピングされるかを解説します。

Data Types

詳細な説明

Sequelizeでの日付・時刻型

SQLデータベースにはいくつかの日付/時刻カラム型があり、Sequelizeはそれらを処理するために3つの主要なDataTypesを提供します:DATE(タイムゾーン付き日時)、DATEONLY(時刻なしの日付)、TIME

マッピング表

SQL型 Sequelize DataType JavaScript型
TIMESTAMP DataTypes.DATE Date
TIMESTAMPTZ DataTypes.DATE Date
DATETIME DataTypes.DATE Date
DATE DataTypes.DATEONLY string (YYYY-MM-DD)
TIME DataTypes.TIME string (HH:mm:ss)

created_atとupdated_atの処理

コンバーターは一般的なタイムスタンプカラム名を検出し、Sequelizeの組み込みタイムスタンプ管理を設定します:

CREATE TABLE articles (
  id SERIAL PRIMARY KEY,
  title VARCHAR(255) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

生成されるモデルにはtimestamps: trueとフィールド名オーバーライドが含まれます:

{ timestamps: true, createdAt: 'created_at', updatedAt: 'updated_at' }

CURRENT_TIMESTAMPデフォルト

カラムがDEFAULT CURRENT_TIMESTAMPまたはDEFAULT NOW()を持つ場合、コンバーターはそれをdefaultValue: DataTypes.NOWにマッピングします:

created_at: { type: DataTypes.DATE, defaultValue: DataTypes.NOW }

カレンダー日付用のDATEONLY

SQL DATE(時刻コンポーネントなし)はDataTypes.DATEONLYにマッピングされ、JavaScriptでは完全なDateオブジェクトではなくプレーンなYYYY-MM-DD文字列を返します。これは誕生日、イベント日など、タイムゾーンが無関係なカレンダーのみの値に便利です。

ユースケース

イベント管理システムを構築しており、イベントにカレンダー日付(DATE)とログ記録用の正確なタイムスタンプの両方がある場合。正しいSequelize DataTypeを使用することで、適切なシリアライゼーションとタイムゾーン処理が保証されます。

試してみる — SQL to Sequelize Model

フルツールを開く