Sql 如何使用update语句将列值从0切换到1,反之亦然?
我有一个表Sql 如何使用update语句将列值从0切换到1,反之亦然?,sql,sql-server,tsql,sql-server-2005,Sql,Sql Server,Tsql,Sql Server 2005,我有一个表表1,如下所示 col1 col2 ---- ---- A 1 B 1 C 1 D 0 E 0 F 0 我希望结果表如下(使用Update语句) 我相信还有一种更优雅的方式,但这应该是可行的: UPDATE Table1 SET col2 = CASE col2 WHEN 0 THEN 1 WHEN 1 THEN 0 ELSE col2 END 脚本1: 脚本2:如果值始终为0或1,则可以使用逐位异或运算符 如果在SQL Server
表1
,如下所示
col1 col2
---- ----
A 1
B 1
C 1
D 0
E 0
F 0
我希望结果表如下(使用Update
语句)
我相信还有一种更优雅的方式,但这应该是可行的:
UPDATE Table1
SET col2 = CASE col2 WHEN 0 THEN 1 WHEN 1 THEN 0 ELSE col2 END
脚本1:
脚本2:如果值始终为0或1,则可以使用逐位异或运算符
如果在SQL Server上使用正确的布尔值(位),则可以使用:
既然您提到您正在使用INTs,那么:
update dbo.Table1 set col2 = 1 - col2;
非常简单的查询
update table set col= (col-1)* -1;
说明:
- 0的情况:
update table set col= (0-1)* -1; // return 1;
- 案例1:
update table set col= (1-1)* -1; // return 0;
UPDATE table SET col = 1-col
根据第二列的值,如果为0,则应使用1更新,如果为1,则应使用0更新。我尝试了更新和案例,但不起作用。太好了。。。它工作得很好。非常感谢您的快速帮助。:)只是吹毛求疵,比特和布尔不一样。SQL Server中没有布尔类型。是的,SQL Server没有布尔类型,这就是为什么这不起作用的原因。
SELECT*FROM assessed WHERE is inssured
。SQL Server的BIT并不像其他数据库(例如PostgreSQL)那样是一级布尔值。SQL Server的布尔值与Fortran上的一样不存在。BIT是SQL Server团队出于布尔目的引入的。但出于所有目的,SQLServer的每一位都是布尔值。实体框架和许多orm也尊重这一点:在一个人为的测试中,针对一个巨大的表,您的script2比我的尝试快了一点。不确定我们能不能在这方面有所改进。干得好!不是OP想要的,但万一有人用谷歌搜索这个。这在检查字符串时也起作用:UPDATE dbo.Table1 SET col1=(CASE col1当'A'时,然后'B'当'B'时,然后'A'ELSE col1 END);这是简单而精彩的。请解释代码的作用以及它是如何实现的。
update table set col= (col-1)* -1;
update table set col= (0-1)* -1; // return 1;
update table set col= (1-1)* -1; // return 0;
UPDATE table SET col = 1-col