Mer*_*lan 5 sql postgresql knex.js
所以我的代码如下:
.select('id','units',knex.raw('case when units > 0 then cost else 0 end'))
Run Code Online (Sandbox Code Playgroud)
但它给了我这样的错误
提示:“没有运算符与给定名称和参数类型匹配。您可能需要添加显式类型转换。”
知道我应该如何纠正我的代码,以便我可以使用另一列作为不同列的条件吗?
Ric*_*her 10
我没有收到与您相同的错误:
CASE 类型整数和字符变化无法匹配
但无论如何,问题是你试图比较苹果和橘子。Postgres 对列类型非常严格,因此尝试将整数0和字符串( 的值cost)放在同一列中不会导致隐式转换。
将输出转换为字符串即可解决问题:
.select(
"id",
"units",
db.raw("CASE WHEN units > 0 THEN cost ELSE '0' END AS cost")
)
Run Code Online (Sandbox Code Playgroud)
示例输出:
[
{ 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' }
]
Run Code Online (Sandbox Code Playgroud)