Sql 如何使用knex.js编写另一列作为条件的CASE子句

Sql 如何使用knex.js编写另一列作为条件的CASE子句,sql,postgresql,knex.js,Sql,Postgresql,Knex.js,因此,我的代码如下所示: .select('id','units',knex.raw('case when units > 0 then cost else 0 end')) 但它给了我这样的错误 提示:“没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。” 您知道我应该如何更正代码,以便使用另一列作为不同to列的条件吗?我没有收到与您相同的错误: 无法匹配整型和可变字符的大小写类型 但不管怎样,问题是你试图比较苹果和橙子。Postgres对列类型要求非常严格,因此尝试在

因此,我的代码如下所示:

.select('id','units',knex.raw('case when units > 0 then cost else 0 end'))
但它给了我这样的错误

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


您知道我应该如何更正代码,以便使用另一列作为不同to列的条件吗?

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

无法匹配整型和可变字符的大小写类型

但不管怎样,问题是你试图比较苹果和橙子。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' }
]

首先是mysql还是postgres?第二,什么样的数据类型是
单位
成本
?是的,是postgres。单位是浮动的,成本是弦。我的人Rich Churcher又来了!让我测试一下,我会尽快给出反馈!谢谢,里奇!昨天一整天我都在苦苦思索这个代码!另一个快速问题是是否可以将
成本
转换为整数?我试着用CAST来做,但它给了我pg_atoi错误我不建议转换成整数。。。除非你想把钱存起来?建议快速阅读和(如果你想使用Postgres的
money
type,你需要它)。谢谢你的建议,伙计!是的,我试图存储单位和成本的总和,因此需要它是整数,我使用了
cast
,它成功了。