一个有趣的SQL命题 用一条语句切换BIT型的真假值_MsSql

当然,第一反应是用存储过程。判断原来这个字段值,然后UPDATE。
网上粗粗找了一下没找到方案。自己一动手,居然有个很有趣的结果,连WHERE都不用
对数据库的BIT型赋值,用SQL语句来操作和用管理界面输入不同。管理界面输入必须用TRUE或FALSE来填写。而SQL语句则用0或1
于是乎,先尝试:

复制代码 代码如下:

updat t set b=b+1 where id=1;
select b from t where id=1;

b字段一直保持1
那么用减号呢

复制代码 代码如下:

update t set b=b-1 where id=1;
select b from t where id=1;

可以发现每次结果就在0和1之间切换,SQL SERVER把-1当做1来处理。
这个需求很容易就解决了。
通常这在一些状态切换(或开关)的地方会用到,在需求中不需要知道切换后的情况。很有趣也很简单,呵呵

时间: 2025-01-30 06:02:57

一个有趣的SQL命题 用一条语句切换BIT型的真假值_MsSql的相关文章

一个有趣的SQL命题 用一条语句切换BIT型的真假值

当然,第一反应是用存储过程.判断原来这个字段值,然后UPDATE. 网上粗粗找了一下没找到方案.自己一动手,居然有个很有趣的结果,连WHERE都不用 对数据库的BIT型赋值,用SQL语句来操作和用管理界面输入不同.管理界面输入必须用TRUE或FALSE来填写.而SQL语句则用0或1 于是乎,先尝试: 复制代码 代码如下: updat t set b=b+1 where id=1; select b from t where id=1; b字段一直保持1 那么用减号呢 复制代码 代码如下: upd

一个有趣的SQL问题。

问题 有朋友近来要我帮忙解决一个问题,问题描述: 有表,表有3个字段:f1,f2,f3,其中,每个字段中都可能出现1~9之间的9个数字,现要统计出整个表中1~9各出现的次数. 如: F1 F2 F3 1 1 2 1 2 3 2 1 2   在上例中:"1"出现了4次,"2"出现了4次,"3"出现了1次.   当然,这个问题是要求尽可能的用SQL语句来搞定.因为如果用程序,用变量.数组之类,好象就没有提出这个问题的必要.当俺花了几分钟的心思,OVE

一个有趣的排序题,类似acm

问题描述 一个有趣的排序题,类似acm 求大神解决!! 解决方案 排序就可以了http://zhidao.baidu.com/question/433177615.html?fr=iks&word=%C3%BF%B8%F6%D3%CE%CF%B7%D5%DF%B1%BB%B7%D6%C5%E4%B5%BD%D2%BB%D7%E9%B7%C7%B8%BA%D5%FB%CA%FD%2C%D3%CE%CF%B7%D5%DF%BF%C9%D2%D4%BD%AB%D5%E2%D0%A9%CA%FD%C5%

如何写一个方法用SQL语句查询一张表中有多少条数据,方法改怎么写?

问题描述 如何写一个方法用SQL语句查询一张表中有多少条数据,方法改怎么写? 将查询的的返回值为整型 参考用例 类似 以下方法查询政治类新闻人数 新手不知道该如何改动成自己需要的方法 public Map<String, Long> sumPolEntNews(){ //查询政治类新闻人数总和 String sql = "select count(*) from t_user where newsh ='政治类新闻' "; Map<String, Long> m

sql server 获取每一个类别中值最大的一条数据

原文:sql server 获取每一个类别中值最大的一条数据 /* 数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3:a的第三个值 b 1 b1--b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b 5 b5b5b5b5b5 */ --创建表并插入数据: create table tb(name varchar(10),val int,memo varchar(20)) insert into

一个查询的SQL语句请教,希望能够用一条SQL语句得到结果_数据库其它

  各位老大:  我有一个查询的SQL语句请教,希望能够用一条SQL语句得到结果,问题如下:      表X:      A           B           C       D      ------------------      北京   广州   1000     10      北京   深圳   1200     20      北京   上海   500       30      北京   天津   300       40      北京   河南   800   

ORACLE FLASHBACK TABLE 的一个有趣问题

大家都知道ORACLE 10G新增了FLASHBACK特性,其中FLASHBACK TABLE用来对误删的表进行修复.但是今天却发现了FLASHBACK TABLE的一个有趣问题,请看下面慢慢道来:下面我用一个例子来说明我的遇到的有趣的问题,欢迎大家探讨. SQL> CONNECT SYSDBA/***** AS SYSDBA 已连接. SQL> CREATE TABLE TEST (T VARCHAR2(10) ) ; 表已创建. SQL> DROP TABLE TEST; 表已删除.

三大关系数据库字段值超长的一个有趣对比

三大关系数据库字段值超长的一个有趣对比   在开发中,我们可能会遇到插入字段值超长的情况,前阵子遇到这样一个案例,结果一对比后发现一个有趣的现象,如果插入字段值超长,ORACLE.SQL Server.MySQL它们会提示那个字段值超长吗?下面看看实验吧:   ORACLE数据库   SQL> create table test(id number(10), name varchar2(12));   Table created.   SQL> insert into test   2  se

sql 每隔2条数据取出1条数据

问题描述 sql 每隔2条数据取出1条数据 表名 user 需要查询出的字段 name 有数据自带的序号 现在要实现 每隔2条查询出1条数据 大神 你在哪里 select aa.* from (select ROW_NUMBER() over(order by t.pk_id)rnt.* from 表名 t )aa where right(convert(nvarchar(5)rn)1)='1' 我自己写了一个 但是老是提示 right 标识无效 解决方案 select aa.* from (s