字段 人员id,begintime,endtime
数据 A ,2007-12-24 00:00:00,2007-12-28 23:59:00
数据 A ,2007-01-01 00:00:00,2007-01-02 23:59:00表中已有人员A需要出差,出差时间在2007-12-24 00:00:00 到 2007-12-28 23:59:00
问题:如果我还要添加人员A的记录,那么A就不在之前的所有时间段内出差这个判断怎么写,数据库sql20005 开发环境vs 2008 .net 2.0
求高手解决
数据 A ,2007-12-24 00:00:00,2007-12-28 23:59:00
数据 A ,2007-01-01 00:00:00,2007-01-02 23:59:00表中已有人员A需要出差,出差时间在2007-12-24 00:00:00 到 2007-12-28 23:59:00
问题:如果我还要添加人员A的记录,那么A就不在之前的所有时间段内出差这个判断怎么写,数据库sql20005 开发环境vs 2008 .net 2.0
求高手解决
这样选出来的就是结束时间最晚,开始时间最晚的一次出差
2种方法先 update table set begintime=null , endtime=null where 人员id='A',然后添加
注释:必要时可以把begintime 字段和endtime字段改为varchar
把人员A新增记录的时间进行比较
新增记录的时间为@BeginTime,@EndTime
如果临时表内不存在
(@BeginTime>begintime and @beginTime<EndTime) or
(@EndTime>begintime and @EndTime<endTime)的数据
即可以插入
这是我之前写的一个语句
select * from tblEvectionReport
where EmployeeID='dengxueying'
and evectionbegintime>='2008-12-10' and evectionbegintime<='2008-12-30'
and EvectionEndTime>='2008-12-10' and EvectionEndTime<='2008-12-30'这样我记得好像不行,如果是同一个时间段,数据还是能插进去
逻辑就是(@BeginTime> begintime and @beginTime <EndTime) or
(@EndTime> begintime and @EndTime <endTime)这样的
那首先要选出他已有的出差记录吧?
用select top 1 from 表 where id=’A' order by endtime DESC ,beginTime DESC if(start between 数据库开始时间 and 数据库结束时间)
{
//那么就不能插入,直接返回
}
else if(end between 数据库开始时间 and 数据库结束时间)
{
//不能插入
}
else
{
//插入
}这样不行?
问题在于A可以有n个在不同时间段内出差记录!!
2007-1-1 --- 2007-1-10
2007-12-1 --- 2007-12-10
有这两个段时间.那么,比如你现在要新插 2007-5-1 --- 2007-5-10 是允许的.也即,你是希望程序来检测你要插入的这个数据是否允许?那么你要传的参数是什么? 将 @begintime,@endtime放进去,然后 如果合法,则插入并返回true,若不合法,则不插入并返回false ?
我想你可以试试:
不是要插入数据吗?插入的开始时间(start)和结束时间(end)必须要不在以前的记录中是吗?
这样:
"select * from 表 where id=‘A’ and begintime<='"+start+"' and endtime >='"+start"'";
这样的话就是说:看插入的时间在不在以前出差的时间段中,如果能选出记录的话,那么很显然,这个时间是不能出差的。
同样的道理解决endtime。
你看行不行?
{
//不能插入。
}
else
{
//能插入。
}
错了,应该是:
“select * from 表 where id='A' and (starttime<='"+插入的开始时间+"' and Endtime >='"+插入的开始时间+"'")or (startTime>='"+插入的开始时间+"' and starttime<='"+插入的结束时间+"') or (starttime<='"+插入的开始时间+ "' and endtime<='”+插入的结束时间)
大概意思就是说:
插入的时间间隔在以上三种情况是不能插入到数据库中的。
根据这个意思,查询符合条件的记录,如果能找到记录说明不能插入到数据库中。
sql语句不对,表达个意思就行了。
SELECT a.* FROM
(SELECT 'a',@beginTime bTime,@endTime eTime) a
WHERE NOT EXISTS(
SELECT 1 FROM tb
WHERE bTime BETWEEN beginTime AND EndTime
OR
eTime BETWEEN beginTime AND EndTime
/*OR
EndTime BETWEEN bTime AND eTime
OR
beginTime BETWEEN bTime AND eTime*/
)
IF @@ROWCOUNT=0
--返回false
ELSE
--返回true
鸣谢!zhuanshen712 ,fcuandy hy_lihuan