表A
ID BeginTime EndTime
1 空 2010
2 空 空
3 1990 空
3 1980 1985
查询参数: 1992-01 年月在表中的数据
应该找到
ID BeginTime EndTime
1 空 2010
2 空 空
3 1990 空
如何写查询SQL存储过程
------解决思路----------------------
create table 表A
(ID int,BeginTime varchar(10),EndTime varchar(10))
insert into 表A
select 1,'空','2010' union all
select 2,'空','空' union all
select 3,'1990','空' union all
select 3,'1980','1985'
declare @x varchar(10) -- 查询参数
select @x='1992-01'
select *
from 表A
where left(@x,4) between
case when BeginTime='空' then '0' else BeginTime end
and case when EndTime='空' then '99999' else EndTime end
/*
ID BeginTime EndTime
----------- ---------- ----------
1 空 2010
2 空 空
3 1990 空
(3 row(s) affected)
*/
------解决思路----------------------
Create Table ##表A
(
ID Int,
BeginTime Varchar(4),
EndTime Varchar(4)
)
Insert Into ##表A
Select 1,'','2010'
Union All
Select 2,'',''
Union All
Select 3,'1990',''
Union All
Select 3,'1980','1985'
Declare @QueryTime As varchar(7)
Set @QueryTime='1992-01'
Select * From ##表A
Where Cast(Case When BeginTime<>'' Then BeginTime+'-1-1' Else @QueryTime+'-1' End As DateTime)<=Cast(@QueryTime+'-1' As DateTime)
And Cast(Case When EndTime<>'' Then EndTime+'-1-1' Else @QueryTime+'-1' End As DateTime)>=Cast(@QueryTime+'-1' As DateTime)
Drop Table ##表A