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
,它成功了。