日期:2014-05-18 浏览次数:20578 次
select * from tb where isnumeric(合同期限)=1 and datediff(month,getdate(),签合同时间)<3
------解决方案--------------------
--假设只针对合同期限为年的,并且考虑日期。
select * from t where charindex('年' , 合同期限) > 0 and
((datediff(mm,dateadd(yy,cast(replace(合同期限,'年','') as int),签合同时间),getdate()) < 3) or
(datediff(mm,dateadd(yy,cast(replace(合同期限,'年','') as int),签合同时间),getdate()) = 3 and
right(convert(varchar(10),签合同时间,120),5) > right(convert(varchar(10),getdate(),120),5)))
------解决方案--------------------
select * from t where charindex('年',合同期限)>0 and datediff(mm,dateadd(yy,cast( replace(合同期限,'年 ','') as int),签合同时间),getdate())<3
------解决方案--------------------
--长期的是不是不计算 if object_id('tb') is not null drop table tb go create table tb ( 签合同时间 datetime, 合同期限 varchar(10) ) go insert into tb select '2010-11-30','1' union all select '2011-01-01','1' union all select '2009-01-01','长期' union all select '2008-05-05','3' go select * from tb where 合同期限<>'长期' and datediff(mm,dateadd(yy,cast(合同期限 as int),签合同时间),getdate())<3 go /* 签合同时间 合同期限 ----------------------- ---------- 2010-11-30 00:00:00.000 1 2011-01-01 00:00:00.000 1 (2 行受影响) */
------解决方案--------------------
你需要把合同期限不是"长期"的筛选出来即可,我上面是筛选包含年的,你可以使用合同期限<>'长期'
------解决方案--------------------
这个是设计上的问题,加个到期时间,如果是长期合同,默认到期时间比如设置+20年,这样你不用判断和同期限多长,直接计算距离现在时间3个月的就行。
Select * From T Where DateDiff(mm, GetDate(),到期时间) < 3
如果已经设计好了,有数据了,必须这样做,那么就用
Select * From T Where isNumeric(合同期限)=1 And DateDiff(mm, GetDate(),到期时间) < 3