在我的很多 MySQL 查询中,我有一些计算
(CAST(return_item as SIGNED)*2-1)
从本质上讲,那段代码可以转换true => 1
and false => -1
,而且效果很好!我不喜欢它的是它在 SQL 语句中的可读性。
是否有更简洁的方式来编写此声明,使其意图更清晰?
return_item
是BIT(1)
表示系统中的布尔值。
在我的很多 MySQL 查询中,我有一些计算
(CAST(return_item as SIGNED)*2-1)
从本质上讲,那段代码可以转换true => 1
and false => -1
,而且效果很好!我不喜欢它的是它在 SQL 语句中的可读性。
是否有更简洁的方式来编写此声明,使其意图更清晰?
return_item
是BIT(1)
表示系统中的布尔值。
如果你想明确你的意图,几乎没有比使用条件更好的方法:
IF(return_item, 1, -1)
执行此操作的最标准 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
试试这个:
if(return_item=true, 1, -1)
怎么样SELECT POWER(-1, 1-SIGN(return_item))
?