重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
declare @num1 int,@num2 int; -- 如果是int型直接+就可以
创新互联服务项目包括珙县网站建设、珙县网站制作、珙县网页制作以及珙县网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,珙县网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到珙县省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
set @num1=1;
set @num2=2;
select (@num1+@num2) num;
declare @num1 varchar(2),@num2 varchar(2); --非int类型需要convert为int型后+
set @num1='1';
set @num2='2';
declare @tempnum1 int,@tempnum2 int;
set @tempnum1 = CONVERT(int,@num1);
set @tempnum2 = CONVERT(int,@num2);
select (@tempnum1+@tempnum2) num;
select (select count(*) as y from t where s='b')
(select count(*) as n from t where s!='b')
在SqlServer默认当做int类型,两个int变量相除得到的还是个int类型 ,所以只要把其中一个改成小数类型的就可以得到你要的结果了。
除法运算
一款简单的除法运算题目,小朋友们懂的做,很简单的除法运算,小朋友们来挑战一下
运算是一种游戏,适用于小孩子对于数学的理解。
dateadd是一个用来相加的一个函数,dd指的是日期里面的日,DATEADD(dd,
DATEDIFF(dd,0,getdate()),
0)
意思是将DATEDIFF(dd,0,getdate())函数返回的日期增加0天,如果将0改成1,DATEADD(dd,
DATEDIFF(dd,0,getdate()),
1)那就是加一天
DATEDIFF函数返回的是两个日期之间的间隔,dd就是间隔多少天。
你这SQL是利用UPDATE的执行顺序来运行的
在UPDATE批量数据的时候,先给变量 @nDiffQty赋值,再根据数量层层减nQty的值赋值给原来的nDiffQty。
大概逻辑就是根据Type非则取总数,否则用原来的总数来减原列数量并赋值。感觉这个逻辑会因执行UPDATE的顺序而有差异。
如果转成Oracle的话可以用以下SQL:
----------------------先弄两个值
DECLARE
n_DiffQty NUMBER;
s_Type VARCHAR2
(4);
-----------------生成游标------------------
CURSOR aa
IS
select id, sType,nSumQty, nQty from #1;
-------------------循环----------------
FOR
a IN aa
LOOP
IF (a.sType='')
THEN
n_DiffQty:=a.nSumQty;
ELSE
n_DiffQty:=n_DiffQty-a.nQty;
END IF;
Update #1 Set nDiffQty = n_DiffQty where id=a.id;
END LOOP;
oracle中的方法可以这样,但是不知道sql server中支不支持相应的函数,你可以试一下
select replace(t.number,'m','') num from table1 t //去掉m 变成100*200但是这是varchar类型不是数字
(1)instr(replace(t.number,'m',''),'*',1) 从100*200的第1位截取到 '*' 的长度,注:这时是长度,不是数字100
substr(num,1,instr(replace(t.number,'m',''),'*',1)-1) 从第一位截取到'*'之前,即取出100
(2)instr(replace(t.number,'m',''),'*',-1) 从100*200的最后1位截取到 '*' 的长度
substr(num,-1,instr(replace(t.number,'m',''),'*',-1)-1) 取出200
然后(1)*(2)就可以了(把substr里面的num换成 replace(t.number,'m',''))
思路就这样,你再整理一下就可以了