当前位置: 代码迷 >> Sql Server >> *查询时间的SQL语句*该怎么解决
  详细解决方案

*查询时间的SQL语句*该怎么解决

热度:101   发布时间:2016-04-24 09:23:19.0
***查询时间的SQL语句***
表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
  相关解决方案