sequelizeでDATE_FORMATを使った処理を書く
sequelizeでDATE_FORMATを使った処理を書く:
集計するときとかに
こんな感じで、今月作成したユーザ情報を取得する
(実際に集計する場合は
以下、メモ。と参照したドキュメントのURL。
http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#static-method-where
http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#static-method-fn
ここでは
http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#static-method-col
sequelize
でDATE_FORMAT
を使ったSQLを書きたい場合の備忘録。集計するときとかに
DATE_FORMAT
使って書くけど、それをsequelize
ではどうやって実現するのか?と調べてみたメモです。こんな感じで、今月作成したユーザ情報を取得する
SQL
をsequelize
を使って書きたい。(実際に集計する場合は
COUNT(*) as count
になるでしょうか)SELECT * FROM users WHERE DATE_FORMAT(createdAt, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m')
node.js with sequelize
で書くと下記のようになる。(async () => { /* ・ ・ sequelizeの読み込みなどの処理は割愛します ・ */ // 現在の日付を参照するため、ここではmomentを使おうと思います const moment = require('moment'); /* * UserはModelです * http://docs.sequelizejs.com/manual/tutorial/models-usage.html */ const users = await User.findAll({ where: sequelize.where(sequelize.fn('DATE_FORMAT', sequelize.col('createdAt'), '%Y%m'), moment().format('YYYYMM')) }); // 今月作成したユーザ情報のmodel instancesが表示されます console.log(users) })();
sequelize.where
を使ってwhere
を作成している。moment().format('YYYYMM')
で取得した今日の日付のYYYYMM
形式を、引数として渡している。http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#static-method-where
sequelize.fn('DATE_FORMAT',
を使ってDATE_FORMAT
を実現できるよう。http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#static-method-fn
sequelize.col
は引数に対象となるcolumn
を入れることで、対象DBのカラムを表現してくれるobjectを返してくれる。ここでは
createdAt
を指定することで、ユーザの作成日
を対象としている。http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#static-method-col
where: sequelize.where(sequelize.fn('DATE_FORMAT', sequelize.col('createdAt'), '%Y%m'), moment().format('YYYYMM'))
sequelize
を使い始めて半年、未だにドキュメントを読むのに苦労している自分です(遠い目)
コメント
コメントを投稿