mssql中对于bit类型字段的更新一直使用的是先判断再更新,这样就需要先查询一次,再执行更新.
忽然想到有没有可能直接对它进行更新,每次得到更新前的相反值.
首先想到的是用mid,后来发现mid再sql语句中不被支持.
资料显示:"mid是pb的函数,一般的数据库应该游substr函数"
后来找到"SUBSTRING"这个函数,用法何mid一样,于是就有了下面这种方法.
update anketo1 set fb = substring('10',fb+1,1) WHERE id =5
后来问了BM,BM说直接取反
update anketo1 set fb = ~ fb WHERE id =5
我告诉了BM用substring也可以.
BM说:"这家伙厉害,这也能想出,这属于邪门武功."
最后又想到用ABS取绝对值也可以
update anketo1 set fb = abs(fb-1)
我觉得不管是什么武功,能制胜就是好的武功.
以上三种方法都是不错的方法.
附:
SUBSTRING
返回字符、binary、text 或 image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft® SQL Server™ 数据类型的更多信息,请参见数据类型。
语法
SUBSTRING ( expression , start , length )
参数
expression
是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。
start
是一个整数,指定子串的开始位置。
length
是一个整数,指定子串的长度(要返回的字符数或字节数)。
Abs 函数
返回数字的绝对值。
Abs(number)
number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
说明
数字的绝对值是其无符号的数值大小。例如,Abs(-1) 和 Abs(1) 都返回 1。
下面示例利用 Abs 函数计算数字的绝对值:
Dim MyNumber
MyNumber = Abs(50.3 ) '返回 50.3。
MyNumber = Abs(-50.3) '返回 50.3。