在我的一些MySQL查询中,我有一个计算
(CAST(return_item as SIGNED)*2-1)
基本上这段代码会转换true => 1
和false => -1
,而且效果很好!
我不喜欢它的是它在SQL语句中的可读性。
是否有更清晰的方式来撰写此声明,使其意图更清晰?
return_item
是BIT(1)
,表示系统中的布尔值。
答案 0 :(得分:3)
如果你想明确你的意图,那么使用条件几乎没有更好的方法:
IF(return_item, 1, -1)
答案 1 :(得分: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
答案 2 :(得分:1)
试试这个:
if(return_item=true, 1, -1)
答案 3 :(得分:0)
SELECT POWER(-1, 1-SIGN(return_item))
怎么样?