形如以下table
工号 入厂日期 离厂日期
001 2005-03-03 2005-03-28
002 2005-03-03 null
003 2005-03-03 2005-04-05 已知查询日期 范围为 2005-03-01 至2005-03-31
我想查询的结果是以下情况:
工号 入厂日期 离厂日期 入厂之前扣除天数 入厂之后扣除天数 合计
001 2005-03-03 2005-03-28 3 4 7
002 2005-03-03 null 3 0 3
003 2005-03-03 2005-04-05 3 0 3
请高手多多指点一下呀!多谢!!!!!!!!!!!!!!!!!!!!!怎么变行了,再发一次!
工号 入厂日期 离厂日期
001 2005-03-03 2005-03-28
002 2005-03-03 null
003 2005-03-03 2005-04-05 已知查询日期 范围为 2005-03-01 至2005-03-31
我想查询的结果是以下情况:
工号 入厂日期 离厂日期 入厂之前扣除天数 入厂之后扣除天数 合计
001 2005-03-03 2005-03-28 3 4 7
002 2005-03-03 null 3 0 3
003 2005-03-03 2005-04-05 3 0 3
请高手多多指点一下呀!多谢!!!!!!!!!!!!!!!!!!!!!怎么变行了,再发一次!
--建立测试环境
Create table TEST
(工号 Varchar(10),
入厂日期 DateTime,
离厂日期 DateTime
)
GO
--插入数据
Insert TEST Values('001', '2005-03-03', '2005-03-28')
Insert TEST Values('002', '2005-03-03', null )
Insert TEST Values('003', '2005-03-03', '2005-04-05')
GO
--测试
Declare @BeginDate DateTime
Declare @EndDate DateTime
Set @BeginDate='2005-03-01'
Set @EndDate='2005-03-31'
Select *,(入厂之前扣除天数+入厂之后扣除天数) As 合计 from
(Select *,
(Case When 入厂日期 >@BeginDate Then DateDiff(d,@BeginDate,入厂日期)+1 Else 0 End) As 入厂之前扣除天数,
(Case When @EndDate >离厂日期 Then DateDiff(d,离厂日期,@EndDate)+1 Else 0 End) As 入厂之后扣除天数
from TEST) A
--删除测试环境
Drop table TEST
--结果
/*
工号 入厂日期 离厂日期 入厂之前扣除天数 入厂之后扣除天数 合计
001 2005-03-03 00:00:00.000 2005-03-28 00:00:00.000 3 4 7
002 2005-03-03 00:00:00.000 NULL 3 0 3
003 2005-03-03 00:00:00.000 2005-04-05 00:00:00.000 3 0 3
*/
日期是DATetime 型的!是要控制成日期!
TO:qizhirui(其其)
主要目的是计算该员工当月出勤的天数,扣除入厂的天数,就是距月初的天数,同理,离职也一样!
Create table TEST
(工号 Varchar(10),
入厂日期 DateTime,
离厂日期 DateTime
)
GO
--插入数据
Insert TEST Values('001', '2005-03-03', '2005-03-28')
Insert TEST Values('002', '2005-03-03', null )
Insert TEST Values('003', '2005-03-03', '2005-04-05')
GO
--测试
Declare @BeginDate DateTime
Declare @EndDate DateTime
Set @BeginDate='2005-03-01'
Set @EndDate='2005-03-31'
Select 工号,Convert(varchar(10),入厂日期,120) As 入厂日期,Convert(varchar(10),离厂日期,120) As 离厂日期,入厂之前扣除天数,入厂之后扣除天数,(入厂之前扣除天数+入厂之后扣除天数) As 合计 from
(Select *,
(Case When 入厂日期 >@BeginDate Then DateDiff(d,@BeginDate,入厂日期)+1 Else 0 End) As 入厂之前扣除天数,
(Case When @EndDate >离厂日期 Then DateDiff(d,离厂日期,@EndDate)+1 Else 0 End) As 入厂之后扣除天数
from TEST) A
--删除测试环境
Drop table TEST
--结果
/*
工号 入厂日期 离厂日期 入厂之前扣除天数 入厂之后扣除天数 合计
001 2005-03-03 2005-03-28 3 4 7
002 2005-03-03 NULL 3 0 3
003 2005-03-03 2005-04-05 3 0 3
*/
我想再问一下,那个离厂日期中NULL 没有影响吗?"@EndDate >离厂日期"这样比较不会出问题?