首页 > 解决方案 > 如何使用 knex.js 以另一列作为条件编写 CASE 子句

问题描述

所以我的代码如下所示:

.select('id','units',knex.raw('case when units > 0 then cost else 0 end'))

但它给了我这样的错误

提示:“没有运算符与给定的名称和参数类型匹配。您可能需要添加显式类型转换。”

知道我应该如何纠正我的代码,以便我可以使用另一列作为与 column 不同的条件吗?

标签: sqlpostgresqlknex.js

解决方案


我没有得到与您相同的错误:

CASE 类型整数和字符变化不能匹配

但无论如何,问题在于您正在尝试比较苹果和橙子。Postgres 对列类型非常严格,因此尝试将整数0和字符串(的值cost)放在同一列中不会导致隐式强制转换。

把你的输出变成一个字符串就可以了:

  .select(
    "id",
    "units",
    db.raw("CASE WHEN units > 0 THEN cost ELSE '0' END AS cost")
  )

样本输出:

[
  { id: 1, units: null, cost: '0' },
  { id: 2, units: 1.2, cost: '2.99' },
  { id: 3, units: 0.9, cost: '4.50' },
  { id: 4, units: 5, cost: '1.23' },
  { id: 5, units: 0, cost: '0' }
]

推荐阅读