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を使い始めて半年、未だにドキュメントを読むのに苦労している自分です(遠い目)
コメント
コメントを投稿