日度归档:2018年7月2日

mssql sqlserver 获取指定日期为本月第几个工作日


摘要:
下文讲述工作中,需要获取指定日期在当月的工作日


下文讲述常规的指定工作日所在月的天数分析,
实现思路:
1 生成一个国家法定假日表(A),非星期六,星期天
2 生成一个国家法定补办表(B),涉及星期六星期天调班
3 生成指定月份的日期流水表(C)
4 获取指定日期的工作日信息,如下所示:

  --例: 获取 2018-4-10 为2018年4月的第几个工作日
 
 declare @d datetime
  set @d ='2018-4-10'   --可通过下面的方法计算出 为本月第6个工作日
 
---1:获取4月指定日期的所在月工作日数
create table A(A datetime)
create table B(B datetime)
----4.5.4.6 4.7 4.30为法定假日
insert into A (A)values('2018-4-5'),
('2018-4-6'),('2018-4-7'),('2018-4-30')
----补班日 4月8 4月28 4月30 日
insert into B (B)values('2018-4-8'),
('2018-4-28'),('2018-4-30')

---生成指定月份(4月)所有天数流水
set datefirst 1   --设置星期一为第一个工作日

 select   *  from 
 (
 
select row_number() over(order by d asc ) as [本月第*个工作日],d,datepart(w,d) as [weekInfo] from (
select dateadd(day,number,'2018-4-1') as d from master..spt_values 
where type='p' 
and number >=0 
and dateadd(day,number,'2018-4-1') between '2018-4-1' and dateadd(day,-1,'2018-5-1')
) as   a 
where a.d not in (select A from A)
and   (a.d  in (select b from B ) 
        or datepart(w,a.d)  not in (6,7) 
       )
)   as extend 
where d =@d 
 
go
drop table A 
drop table B

mssql_sqlserver_指定日期所属月份工作日获取

mssql_sqlserver_指定日期所属月份工作日获取

mssql sqlserver 三种数据表数据去重方法分享


摘要:
下文将分享三种不同的数据去重方法

数据去重:需根据某一字段来界定,当此字段出现大于一行记录时,我们就界定为此行数据存在重复。



数据去重方法1:

当表中最在最大流水号时候,我们可以通过关联的方式为每条重复的记录获取唯一值

数据去重方法2:

为表中记录,按照指定字段进行群组,并获取最大流水号,然后再进行去重操作

数据去重方法3:

采用分组后,重复数据组内排名,如果排名大于1代表是重复数据行数据

三种去重方法效率对比:
方法3 > 方法2 > 方法1

  
create table test(keyId int identity,sort varchar(10),
info varchar(20))
go

---方法1 
truncate table test ;

insert into test(sort,info)values('A','maomao365.com')--1
insert into test(sort,info)values('A','猫猫小屋')     --2
insert into test(sort,info)values('B','mssql_blog')   --3
insert into test(sort,info)values('B','优秀的sql——blog') --4
insert into test(sort,info)values('B','maomao365')       --5
insert into test(sort,info)values('C','sql优化blog')     --6
go
 
delete from test where test.keyId = (select max(b.keyId) from test b where test.sort=b.sort);
select * from test 
---方法2:
truncate table test ; 
insert into test(sort,info)values('A','maomao365.com')
insert into test(sort,info)values('A','猫猫小屋')
insert into test(sort,info)values('B','mssql_blog')
insert into test(sort,info)values('B','优秀的sql——blog')
insert into test(sort,info)values('B','maomao365')
insert into test(sort,info)values('C','sql优化blog')
go
delete from test  
where keyid not in(select min(keyId) from test  group by sort having count(sort)>=1);
select * from test 
---方法3:
truncate table test ; 
insert into test(sort,info)values('A','maomao365.com')
insert into test(sort,info)values('A','猫猫小屋')
insert into test(sort,info)values('B','mssql_blog')
insert into test(sort,info)values('B','优秀的sql——blog')
insert into test(sort,info)values('B','maomao365')
insert into test(sort,info)values('C','sql优化blog')
go
delete  A2 from (
select row_Number() over(partition by sort order by keyid) as keyId_e,* from test  
) as A2 where A2.keyId_e >1 

select * from test 
go
drop table test 
mssql_sqlserver_数据表数据去重的三种方法分享

mssql_sqlserver_数据表数据去重的三种方法分享

mssql sqlserver sql语句判断表是否存在指定数据的方法分享


摘要:
下文讲述如何判断表记录是否存在记录的方法分享


在平时sql脚本编写中,我们经常涉及表是否存在记录的判断,
如:
数据修改前;
数据删除前;

  if exists(select top 1 null from [表名] where [检索条件])
   begin
       /*表存在指定条件的数据*/
   end