sequelizeでDATE_FORMATを使った処理を書く

sequelizeでDATE_FORMATを使った処理を書く:

sequelizeDATE_FORMATを使ったSQLを書きたい場合の備忘録。

集計するときとかにDATE_FORMAT使って書くけど、それをsequelizeではどうやって実現するのか?と調べてみたメモです。

こんな感じで、今月作成したユーザ情報を取得するSQLsequelizeを使って書きたい。

(実際に集計する場合は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) 
})(); 
以下、メモ。と参照したドキュメントのURL。

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

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)