昨天在MYSQL数据库上执行了一个命令,一下子走神了,把select后面的条件都复制过来,忘记复制where了,原句应该为:update tb set value = value * 0.1 where datetime >= '2016-01-01' and DATETIME < '2016-03-01' and (DATE_FORMAT(datetime,'%k') >= 22 or DATE_FORMAT(datetime,'%k') < 6)一不小心写成了update tb set value = value * 0.1 and datetime >= '2016-01-01' and DATETIME < '2016-03-01' and (DATE_FORMAT(datetime,'%k') >= 22 or DATE_FORMAT(datetime,'%k') < 6)
然后竟然语句都执行了,我记得mssql还是会报错的。更坑的是我的VALUE值全部变成了0,之前value里的数值都没有了。我是UPDATE value * 0.1,怎么会有这样的结果呢?

解决方案 »

  1.   

    1 AND 2 对MYSQL,或者很多语言中都是正常的逻辑运算。他的结果为 真 或者 假。 而 TRUE = 1, FALSE =2 在很多语言中做了如此定义。MYSQL也采用了相同的定义。value * 0.1 and datetime >= '2016-01-01' and DATETIME < 
     '2016-03-01' and (DATE_FORMAT(datetime,'%k') >= 22 or DATE_FORMAT(datetime,'%k') < 6)其实也就是个正常的表达式计算1+ 2*3 AND 5<2 OR 7>6 这个表达式在MYSQL中可以被正常处理。
      

  2.   

    value * 0.1 and datetime >= '2016-01-01' and DATETIME < 
     '2016-03-01' and (DATE_FORMAT(datetime,'%k') >= 22 or DATE_FORMAT(datetime,'%k') < 6)意思是因为这段话返回的是0,所有我所有的值都变成了0了对么?
      

  3.   

    自己亲自试一下不就知道了?select value * 0.1 and datetime >= '2016-01-01' and DATETIME < 
     '2016-03-01' and (DATE_FORMAT(datetime,'%k') >= 22 or DATE_FORMAT(datetime,'%k') < 6)
    from tb