2

在我的很多 MySQL 查询中,我有一些计算

(CAST(return_item as SIGNED)*2-1)

从本质上讲,那段代码可以转换true => 1and false => -1,而且效果很好!我不喜欢它的是它在 SQL 语句中的可读性。

是否有更简洁的方式来编写此声明,使其意图更清晰?

return_itemBIT(1)表示系统中的布尔值。

4

4 回答 4

3

如果你想明确你的意图,几乎没有比使用条件更好的方法:

IF(return_item, 1, -1)
于 2013-10-09T17:08:03.520 回答
2

执行此操作的最标准 SQL 方法是CASE语句:

CASE return_item WHEN 1 THEN 1 ELSE -1 END

这非常易读,并且可以在其他数据库产品的用户中运行并熟悉。

由于所讨论的类型可用作布尔值,因此这也可以使用,但可移植性较差(Postgres 的boolean类型可以使用,但 MS SQL Server 的则bit不行):

CASE WHEN return_item THEN 1 ELSE -1 END
于 2013-10-09T17:09:49.143 回答
1

试试这个:

if(return_item=true, 1, -1)
于 2013-10-09T17:08:46.730 回答
0

怎么样SELECT POWER(-1, 1-SIGN(return_item))

于 2013-10-09T17:13:02.343 回答