1.在数据库处理统计数据 刚开始是在数据库处理的,后来发现在业务层会更好些 不过还是放这以后用的着
--查询单个员工工作效率
if exists(select * from sysobjects where name='sp_SelectEfficiency')
drop proc sp_SelectEfficiency
go
create proc sp_SelectEfficiency
@CpNumber varchar(20),
@LastTime varchar(20),
@LastTime2 varchar(20)
as
begin
select @LastTime= convert(datetime,(convert(varchar,@LastTime)+' 00:00:00'))
select @LastTime2= convert(datetime,(convert(varchar,@LastTime2)+' 23:59:59'))
declare @table table
(
CName varchar(20),--来电姓名
CountTime int, --来电次数
Time2 float, --在场时间
Time1 float , --在途时间
Efficiency float --工作效率
)
declare @xunhuan int
select @xunhuan=count(*) from tblCheckedPersonInfo
where 1=1
and (CpNumber=@CpNumber or (@CpNumber is null) or len(@CpNumber)=0)
and(LastTime between @LastTime and @LastTime2)
-- group by CpNumber
while(@xunhuan>0)
begin
declare @name varchar(20) --员工姓名
declare @Number varchar(20) --根据不同的 @xunhuan 找出其员工工号
declare @count float --在场时间 小时数
declare @c int --来电次数
declare @countN int --在场时间 分钟数
declare @countN2 float --工作时间
declare @Efficiency float --工作效率
declare @int int
set @int=1
--根据不同的@xunhuan 找出对应的姓名,工号
select @name=CpName,@Number=CpNumber
from (
select CpID,CpName,CpNumber,
(select count(*) from tblCheckedPersonInfo as e2
where e1.CpID >= e2.CpID
and (e2.CpNumber=@CpNumber or (@CpNumber is null) or len(@CpNumber)=0)
and(e2.LastTime between @LastTime and @LastTime2)
) as rownumber
from tblCheckedPersonInfo as e1
where 1=1
and (e1.CpNumber=@CpNumber or (@CpNumber is null) or len(@CpNumber)=0)
and(e1.LastTime between @LastTime and @LastTime2)
) as a
where rownumber=@xunhuan
--首先判断这条信息是否完整 即 要有离开宾馆时间 到达工厂时间 离开工厂时间
--根据工厂代码分组 查询在场时间和
select @countN=sum(a.shijian) from
(
select FacNumber,datediff(n,min(LastTime),max(LastTime)) as shijian from tblCheckedPersonInfo
where 1=1
and(CpNumber=@Number)
and(LastTime between @LastTime and @LastTime2)
and(CheckedType='1' or CheckedType='2')
and IsEffect='1'
group by FacNumber
) as a
--根据 天分组 求出每天工作时间和
select @countN2=sum(shijian) from
(
select datediff(n,min(LastTime),max(LastTime)) as shijian from tblCheckedPersonInfo
where 1=1
and(CpNumber=@Number)
and(LastTime between @LastTime and @LastTime2)
and IsEffect='1'
group by day(LastTime)
) as a
--
select @count=convert(decimal(18,2),@countN/convert(numeric(8,2),60)) --在场小时数
select @countN2=convert(decimal(18,2),@countN2/convert(numeric(8,2),60)) --工作时间
select @c=count(*) from tblCheckedPersonInfo
where 1=1
and(CpNumber=@Number)
and(LastTime between @LastTime and @LastTime2)
and IsEffect='1' --来电次数
select @Efficiency=convert(decimal(18,2),(@count/(convert(numeric(8,2),(datediff(dd,@LastTime,@LastTime2)+1))))) --工作效率
insert into @table --将上述结果插入到虚拟表@table中
select CName=@name,CountTime=@c,Time2=@count,Time1=@countN2-@count,Efficiency=@Efficiency
set @xunhuan=@xunhuan-1 --循序-1
set @int=@int+1
end
select distinct CName,CountTime,Time2,Time1,Efficiency from @table
end
---------------------------------------------------------------------------------------------------
2.处理单个字段中的数据
如‘12,123,abc,ccd’
通过‘12’模糊查询后将其符合查找结果为
12
123
--将电话号码 放在gridview 中模糊查询 ,
if exists(select * from sysobjects where name='sp_ChuliTel')
drop proc sp_ChuliTel
go
create proc sp_ChuliTel
@tel nvarchar(1000),
@aa varchar(1000)
as
begin
declare @table table (tele varchar(1000)) --创建临时表
if charindex( ',',@tel) = 0 --如果没有分隔符号插入数据
begin
insert into @table
select @tel
end
while charindex( ',',@tel) > 0 --有分隔符号 循环插入
begin
insert into @table --逐个插入
select left(@tel,charindex( ',',@tel)-1)
set @tel = right(@tel,len(@tel) - charindex( ',',@tel))
If charindex(',',@tel)=0 and @tel<>'' --将最后一条数据插入
insert into @table
select @tel
end
select tele from @table where charindex(@aa, tele)>0
end
------------------------------------------------------------------------------------------------
3.触发器的操作
--触发器 当来电信息有一条记录 的根据当前的CpID 插入检验员姓名 组号 工厂名称 及判断来电号码与工厂地址是否一致
go
--if exists(select * from tblCheckedPersonInfo where name='trg_tblCheckedPersonInfo')
drop TRIGGER trg_tblCheckedPersonInfo
go
CREATE TRIGGER trg_tblCheckedPersonInfo
ON tblCheckedPersonInfo
FOR INSERT
AS
begin
declare @CpID int
declare @CpNumber nvarchar(50)
declare @EmpName nvarchar(50)
declare @EmpGroup varchar(100)
declare @FacNumber nvarchar(100)
declare @FacName nvarchar(100)
declare @TeleNumber varchar(1000)
declare @facname2 nvarchar(100)
declare @CheckedType varchar(4)
declare @id int
declare @IsEffect varchar(1)
declare @time datetime
declare @count int
declare @isSure varchar(10)
-- declare @ID int
select @CpNumber=CpNumber,@FacNumber=FacNumber,@CpID=CpID,@TeleNumber=TeleNumber,@CheckedType=CheckedType,@time=LastTime,@IsEffect=IsEffect,@isSure=isSure from inserted
select @EmpName=EmpName,@EmpGroup=EmpGroup from tblEmployeesInfo where EmpNumber=@CpNumber
select @FacName=FacName from tblFactoryInfo where FacNumber=@FacNumber
select @facname2=FacNumber from tblFactoryInfo where charindex(@TeleNumber, TeleNumber)>0
--判断是否为加班
if((datename(weekday,getdate())='星期六') or (datename(weekday,getdate())='星期日'))
begin
if(charindex('A',@isSure)=0)
begin
update tblCheckedPersonInfo set isSure=isSure+'A' where CpID=@CpID
end
end
--判断号码是否存在
if not exists(select * from tblFactoryInfo where charindex(@TeleNumber,isFacNumber)>0)
begin
if(charindex('B',@isSure)=0)
begin
update tblCheckedPersonInfo set isSure=isSure+'B' where CpID=@CpID
end
end
--判断来电号码 与工厂地址是否一致
if(@facname2 is not null)
begin
if(@FacNumber<>@facname2)
begin
-- update tblCheckedPersonInfo set isGood='0' where CpID=@CpID
if(charindex('C',@isSure)=0)
begin
update tblCheckedPersonInfo set isSure=isSure+'C' where CpID=@CpID
end
end
end
--判断来电信息 是否重复
-- select @id=CpID from tblCheckedPersonInfo
-- where CpNumber=@CpNumber
-- and FacNumber=@FacNumber
-- and TeleNumber=@TeleNumber
-- and CheckedType=@CheckedType
-- and IsEffect='1'
-- and @time<>LastTime
-- if @id>0
-- begin
-- update tblCheckedPersonInfo set IsEffect='2' where CpID=@id
-- end
--
update tblCheckedPersonInfo set CpName=@EmpName,EmpGroup=@EmpGroup,FacName=@FacName where CpID=@CpID
--将来电信息插入到tblEmpGroup中
-- select @count=count(*) from tblCheckedPersonInfo
-- where CpNumber=@CpNumber
-- and FacNumber=@FacNumber
-- and TeleNumber=@TeleNumber
-- and CheckedType=@CheckedType
-- if(@count<=1)
if(@IsEffect='1')
begin
If charindex(',',@EmpGroup)=0 and @EmpGroup<>''
begin
insert into tblEmpGroup(CpNumber,FacNumber,EmpGroup,CheckedType,LastTime)
select @CpNumber,@FacNumber,@EmpGroup,@CheckedType,@time
end
while charindex(',',@EmpGroup)>0
begin
insert into tblEmpGroup(CpNumber,FacNumber,EmpGroup,CheckedType,LastTime)
select @CpNumber,@FacNumber,left(@EmpGroup,charindex( ',',@EmpGroup)-1),@CheckedType,@time
set @EmpGroup = right(@EmpGroup,len(@EmpGroup) - charindex( ',',@EmpGroup))
If charindex(',',@EmpGroup)=0 and @EmpGroup<>''
begin
insert into tblEmpGroup(CpNumber,FacNumber,EmpGroup,CheckedType,LastTime)
select @CpNumber,@FacNumber,@EmpGroup,@CheckedType,@time
end
end
--根据来电信息 判断这条记录是否有效
end
--
end
--去掉字符串两边的‘,’
declare @varchar varchar(10)
declare @str varchar(max)
set @str=',abc,'
select @varchar=left(@str,1)
if @varchar=','
select @str=right(@str,len(@str)-1)
select @varchar=right(@str,1)
if @varchar=','
select @str=left(@str,len(@str)-1)
print @str
--检索数据库中所有表字段内容
declare @str varchar(100)
set @str='张三'
declare @s varchar(8000)
declare tb cursor local for
select s='if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@str+'%'')
print ''所在的表及字段: ['+b.name+'].['+a.name+']'''
from syscolumns a join sysobjects b on a.id=b.id
where b.xtype='U' and a.status>=0
and a.xusertype in(175,239,231,167)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
declare @int int
exec proc_page 'birdbaseinfo','*','english_name','1=1','asc',1,5, @int output
select top 10 * from table where 1=1
and id<(
select min(id) from (select top 10*1 id from table order by id desc) as a
)order by id desc
--oracle
select * from qyxx_qbs where 1=1
and jgdm<(
select min(jgdm) from (
select jgdm from qyxx_qbs
where BZRQ between to_date('2012-04-01','yyyy-MM-dd') and to_date('2012-04-30','yyyy-MM-dd')
and rownum <= 10*1 order by jgdm desc
) a
)
and rownum <= 10
order by jgdm desc