mysql enum 字段位取反的问题。如何实现 enum 字段值取反?或者更优雅的方式重新设置字段

2017-10-24 10:54:50 +08:00
 bear2017

问题: table 中有一个字段为 status, 字段设置enum('0','1') default('0'),要实现取反操作。

即 0-->>1 1-->>0

尝试过

1. 位取反 set status=~statusstatus=0时,输出结果为空

2. 异或set status=status^1status=0时,输出结果为空

3. 取绝对值 set status=abs(status-1)status=0时,输出结果为空

sql 渣渣,大佬请亲喷😂😂

2225 次点击
所在节点    程序员
10 条回复
XiaoFaye
2017-10-24 10:59:31 +08:00
CASE WHEN ELSE 不行吗?
XiaoFaye
2017-10-24 11:01:17 +08:00
不知道 SQL 数据类型有没有像 C 那样的溢出,不然的话可以直接+1 就好,0+1 = 1, 1+1 =2 (溢出) = 0
holyghost
2017-10-24 11:15:00 +08:00
int 的话,可以位操作 UPDATE test SET status = mod(status + 1, 2);
enum 的话,只能 case 了吧?没想到别的办法。
bear2017
2017-10-24 11:26:36 +08:00
@XiaoFaye #1 可以的,不过有没有更好的办法。`case when then` sql 语句太长啦。
溢出应该是不行的吧
@holyghost #3 恩恩,`int`试过是可以的。再看看有没有更好的方式吧
pubby
2017-10-24 11:44:16 +08:00
只有 0,1 ?

status=IF(status=1,0,1)
or
status=1-status
bear2017
2017-10-24 12:00:41 +08:00
@pubby #5 不行哇,在值只有(0,1)的情况下,`status=1-status` 等同于`status=abs(status-1)`。
结果是一毛一样的,`status=0`时候结果还是空[我也很无奈啊]
noNOno
2017-10-24 12:16:11 +08:00
SELECT status,ABS(status-2) FROM test.test
已测
status ABS(status-2)
0 1
1 0
1 0
0 1
0 1
ichou
2017-10-24 12:21:53 +08:00
ichou
2017-10-24 12:30:53 +08:00
bear2017
2017-10-24 13:06:24 +08:00
@noNOno 谢谢,吃完饭了,回去试一下。
@ichou 手机打开有点慢额,回去用电脑看~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/400164

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX