SEQUELIZE:如何使用 EXTRACT MySQL 函数

SEQUELIZE: How to use EXTRACT MySQL function

假设我正在尝试从 user table

中的记录中提取 YEAR_MONTH

我会写:

SELECT EXTRACT(YEAR_MONTH FROM u.created_on)
FROM user u;

我很难理解如何编写涉及更复杂 MySQL 方法的 sequelize 查询。

我知道我可以使用类似的东西:

sequelize.fn('avg', sequelize.col('User.age')), 'avg_age']

对于仅采用一个参数的简单 MySQL 方法。

这是我能得到的最接近的:

[sequelize.fn('extract', ['YEAR', 'FROM'],   
 sequelize.col('User.created_on')), 'created_year_month']

结果如下 SQL:

extract('YEAR_MONTH', 'FROM', `User`.`created_on`) AS `created_year_month`

相对于

SELECT EXTRACT(YEAR_MONTH FROM u.created_on)
FROM user u;

我不知道如何正确构建此查询。

我做了更多挖掘,发现正确的解决方案是使用 sequelize.literal() 向我的 SQL 查询添加任意部分。

这里的解决方法是使用

sequelize.literal('extract(YEAR_MONTH FROM `User`.`created_on`) AS created_year_month')
const tasks = await Task.findAll({
  attributes: ['id',

    [ sequelize.literal('extract(year from "Task"."created_at"::timestamp)'), 'year']

]})