sql - 如何使用 knex.js 以另一列作为条件编写 CASE 子句
问题描述
所以我的代码如下所示:
.select('id','units',knex.raw('case when units > 0 then cost else 0 end'))
但它给了我这样的错误
提示:“没有运算符与给定的名称和参数类型匹配。您可能需要添加显式类型转换。”
知道我应该如何纠正我的代码,以便我可以使用另一列作为与 column 不同的条件吗?
解决方案
我没有得到与您相同的错误:
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' }
]
推荐阅读
- ios - 当用户点击应用程序中的任何链接时,如何阻止我的 ios 应用程序打开 URL?
- java - 如何在java中计算增益百分比?什么是
- android - 在第一个位置插入的项目在向上滚动之前不可见
- javascript - 如何在更改了输入文件的情况下预览音频
- javascript - 无法在现有项目上将 laravel 框架从 5.5 升级到 5.6 或 5.7
- javascript - 使用鼠标位置更改 div 样式的 Javascript 函数
- python - 运行 python 代码时,程序流程卡在 try 块中
- machine-learning - 在我的情况下,最好的机器学习算法是什么
- javascript - JS 变量 = 列表的 Razor 变量
- c# - 模拟异步查询操作