SQL中 常用的处理方法(处理空值、更新字段、去掉小数后的0、查询重复列)
来源:互联网 发布:电池修复软件 编辑:程序博客网 时间:2024/04/30 15:35
-- 一: 处理未查到的空值
select
case when exists(select EndPrice from T_stock where BOMSN='0109')
then (select EndPrice from T_stock where BOMSN='0109')
else 0 end
--二:更新字段值
--strNum 数量
--strId 序号
update T_buy_Pro set CompentNum=isnull(CompentNum,0)+'strNum' ,
Status= case when isnull(BuyNumber,0) > isnull(CompentNum,0)+ 'strNum'
then '部分收料' else '全部收料' end
where BuyProID='strId'
--三:去掉小数点有效数字后面的所有0
decimal类型,小数位数是6位,如果插入的数据为2.5,则检索时显示为2.500000
select cast(2.500000 as real)
----------建一個函數完成-------------
Create Function trun(@i decimal(18,6))
returns varchar(30)
begin
declare @s varchar(30)
set @s=cast(@i as varchar(30))
while len(@s)>0
begin
if cast(substring(rtrim(@s),len(rtrim(@s))-1,1) as int)<>0
begin
set @s=substring(rtrim(@s),1,len(@s)-1)
break
end
set @s=substring(rtrim(@s),1,len(@s)-1)
end
return(@s)
end
----------------------------結束函數-----------
select dbo.trun(12.26000) ----------測試函數
---------------輸出
12.26
drop function trun
函數修改一點點就行了
-----------建一個函數完成-------------
Create Function trun(@i decimal(18,6))
returns varchar(30)
begin
declare @s varchar(30)
set @s=cast(@i as varchar(30))
while len(@s)>0
begin
if cast(substring(rtrim(@s),len(rtrim(@s))-1,1) as varchar)<>'0'
begin
if cast(substring(rtrim(@s),len(rtrim(@s))-1,1) as varchar)='.'
set @s=substring(rtrim(@s),1,len(@s)-2)
else
set @s=substring(rtrim(@s),1,len(@s)-1)
break
end
set @s=substring(rtrim(@s),1,len(@s)-1)
end
return(@s)
end
----------------------------結束函數-----------
select dbo.trun(120.010) ----------測試函數
select dbo.trun(1200.0000) ----------測試函數
---------------輸出
drop function trun
--四:查询重复列 去除重复列且排序
select a,Ntitle from
(
select COUNT(1) as a, Ntitle from T_Acurity group by Ntitle
) va
where va.a>1
create view v_MaxOrder
as
select * from Tsaleordermain as a where
not exists(select i_typeOrder from Tsaleordermain as b where a.n_orderSN= b.n_orderSN
and a.i_typeOrder< b.i_typeOrder)
--order by n_ordernum, i_typeOrder
--五:批量删除大于10天以前的记录
字段是时间 shijian
sql="delete from bot where dateadd(day,10,shijian)<getdate()";
DATEADD (datepart , number, date )
--六:数据库中的日期批量加上1年
update tb set dt = dateadd(yy,1,dt)
--七:Union与Union All的区别
union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
可以在最后一个结果集中指定Order by子句改变排序方式。
A-B,
B-C,
D-E,
E-F。
求替代料关系出现的一个问题,上面两列数据,想变成。
1,A
1,B
1,C
2,D
2,E
2,F
就是互为替代料的分为一组。
方法一
create table tb(c varchar(10))
insert tb
select 'A-B' union all
select 'B-C' union all
select 'D-E' union all
select 'E-F'
with t1 as(
select left(c,1) c1,right(c,1) c2 from tb)
--select c1,c2 from t1 where c1 not in (select c2 from t1)
,t2 as(
select c1,c2,rn=row_number()over(order by getdate()) from t1 where c1 not in (select c2 from t1)
union all
select b.c1,b.c2,a.rn from t2 a,t1 b where b.c1=a.c2
union all
select b.c2,b.c2,a.rn from t2 a,t1 b where b.c1=a.c2 and b.c2 not in (select c1 from t1)
)
select rn,c1 from t2
order by rn,c1
方法二
--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([c1] [nvarchar](10),[c2] [nvarchar](10))
INSERT INTO [tb]
SELECT 'A','B' UNION ALL
SELECT 'B','C' UNION ALL
SELECT 'D','E' UNION ALL
SELECT 'E','F'
--SELECT * FROM [tb]
-->SQL查询如下:
;WITH T AS
(
SELECT RN=ROW_NUMBER()OVER(ORDER BY C1),*
FROM TB T
WHERE NOT EXISTS(SELECT 1 FROM TB WHERE T.C1=C2)
UNION ALL
SELECT B.RN,A.*
FROM TB A,T B
WHERE A.C1=B.C2
)
SELECT DISTINCT RN,TYPE
FROM T
UNPIVOT (TYPE FOR C IN(C1,C2)) UNP
方法三
--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([c] [nvarchar](10))
INSERT TB
SELECT 'A-B' UNION ALL
SELECT 'B-C' UNION ALL
SELECT 'C-CC' UNION ALL
SELECT 'CC-H' UNION ALL
SELECT 'D-E' UNION ALL
SELECT 'E-F'
--SELECT * FROM [tb]
-->SQL查询如下:
;WITH TA AS
(
SELECT CAST(LEFT(C,CHARINDEX('-',C)-1) AS VARCHAR(100)) C1,
CAST(STUFF(C,1,CHARINDEX('-',C),'') AS VARCHAR(100)) C2
FROM TB
)
,T AS
(
SELECT RN=ROW_NUMBER()OVER(ORDER BY C1),* FROM TA T
WHERE NOT EXISTS(SELECT 1 FROM TA WHERE T.C1=C2)
UNION ALL
SELECT B.RN,A.* FROM TA A,T B WHERE A.C1=B.C2
)
SELECT DISTINCT RN,TYPE
FROM T
UNPIVOT (TYPE FOR C IN(C1,C2)) UNP
方法四
SET NOCOUNT ON
DECLARE @a TABLE(a VARCHAR(10),id INT IDENTITY)
INSERT @a SELECT 'A-B'
union all select 'B-C'
union all select 'D-E'
union all select 'E-F'
union all select 'F-G'
DECLARE @s TABLE(id INT,a VARCHAR(20),c VARCHAR(20))
INSERT @s
SELECT id,s,a FROM (SELECT a, LEFT(a,1) s,id FROM @a a
UNION ALL
SELECT a,RIGHT(a,1) s,id from @a a)aa
ORDER BY id
DECLARE @i INT ,@m INT
SELECT @m=1,@i=2
DECLARE @t TABLE(id INT,a VARCHAR(20),c VARCHAR(20))
INSERT @t SELECT * FROM @s WHERE id=@m
WHILE EXISTS(SELECT 1 FROM @s WHERE id=@i)
BEGIN
IF NOT EXISTS(SELECT 1 FROM @s a INNER JOIN @t t ON charindex(a.a,t.c) >0 AND a.id=@i)
SET @m=@m+1
INSERT @t SELECT @m,a,c FROM @s WHERE id=@i
SET @i=@i+1
END
SELECT DISTINCT id,a FROM @t
- SQL中 常用的处理方法(处理空值、更新字段、去掉小数后的0、查询重复列)
- 数据库字段空值处理的方法
- sql 中去掉小数后面的0
- 小数处理的方法
- sql查询自定义列值为空(select 'xxx' as name)处理[插入自定义列]
- oracle修改字段类型时报"要更改的列必须为空"处理方法
- oracle修改字段类型时报"要更改的列必须为空"处理方法
- oracle修改字段类型时报"要更改的列必须为空"处理方法
- mysql查询中去掉多项中某项重复值的方法
- JS中,小数的处理方法
- sql 如何查询 空值的字段
- SQL语句对于多表联合查询重复字段的特殊语法处理
- 重复值和空值的处理
- Ibatis查询数据库字段为空时的处理
- sql中排除字段列为空字符串的列
- SQL两个表连接查询去掉重复数据的方法
- 单列索引和多列索引性能对比,索引字段空值情况的处理
- 批量更新数据库所有表中字段的内容,中木马后的急救处理
- VB.Net程序设计:IE收藏夹管理器-增强版
- 做题记录(2010.3~2010.5)
- Etag和Expires
- Linux Command Line 解析
- 两个最常用的设计模式:工厂方法 & 抽象工厂
- SQL中 常用的处理方法(处理空值、更新字段、去掉小数后的0、查询重复列)
- maven构建与使用
- list vector比较
- 双线性插值算法用于图像缩放
- C#源码 备份和恢复数据库
- 数据库表结构设计方法及原则
- Touch001项目实现过程中遇到的一个技术问题
- Can't connect to MySQL server 频繁掉线刷新后正常解决办法
- IE自动建议下拉菜单错误