V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bear2017
V2EX  ›  程序员

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

  •  
  •   bear2017 · 2017-10-24 10:54:50 +08:00 · 2228 次点击
    这是一个创建于 2586 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题: 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 渣渣,大佬请亲喷😂😂

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

    status=IF(status=1,0,1)
    or
    status=1-status
    bear2017
        6
    bear2017  
    OP
       2017-10-24 12:00:41 +08:00
    @pubby #5 不行哇,在值只有(0,1)的情况下,`status=1-status` 等同于`status=abs(status-1)`。
    结果是一毛一样的,`status=0`时候结果还是空[我也很无奈啊]
    noNOno
        7
    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
        8
    ichou  
       2017-10-24 12:21:53 +08:00
    bear2017
        10
    bear2017  
    OP
       2017-10-24 13:06:24 +08:00 via Android
    @noNOno 谢谢,吃完饭了,回去试一下。
    @ichou 手机打开有点慢额,回去用电脑看~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5247 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:51 · PVG 16:51 · LAX 00:51 · JFK 03:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.