用于从两列中的两个日期之间检索数据的SQL查询

时间:2016-12-10 06:59:30

标签: c# sql asp.net sql-server sql-server-2008

用于从两列中的两个日期之间检索数据的SQL查询

select distinct mname 
from tb_reqmach  
where fromdate >= '2016/12/08' 
  and todate <= '2016/12/30' 
  and mcfact = 'BSC - 3' 
group by mname

当我使用上面的查询时,它返回null。 db的值

The figure attached is the data saved in db

当起始日期和两个日期介于保存日期之间时,请帮助检索行

当我使用

select distinct mname 
from tb_reqmach  
where fromdate >= '2016/12/01' 
  and todate <= '2016/12/30' 
  and mcfact = 'BSC - 3' 
group by mname 

它检索行,当我使用

select distinct mname, fromdate 
from tb_reqmach  
where '2016/12/08' between fromdate and todate 

这也会检索行

但我需要按照我的要求检索

4 个答案:

答案 0 :(得分:0)

试试这个:

select distinct mname 
from tb_reqmach  
where fromdate >= DATEADD(mm, DATEDIFF(mm, 0, '2016/12/08'), 0)
  and todate <= DATEADD (dd, -1, DATEADD(mm, DATEDIFF(mm, 0, '2016/12/25') + 1, 0)) 
  and mcfact = 'BSC - 3' 
group by mname

如果想要分别从fromdate到date检索第一天和最后一天的数据,请在条件中使用equal。

答案 1 :(得分:0)

sql不需要更多! 用这个:

select distinct mname 
from tb_reqmach  
where fromdate >= '2016/12/08' 
  and mcfact = 'BSC - 3' 
group by mname

然后看一下结果: 是否有任何行(todate&lt; ='2016/12/30')??

屏幕截图在范围内无法帮助。

答案 2 :(得分:0)

select distinct mname 
from tb_reqmach  
where fromdate >= convert(datetime, '2016-12-08') 
  and todate <= convert(datetime, '2016-12-30') 
  and mcfact = 'BSC - 3' 
group by mname

答案 3 :(得分:0)

问题在于您没有包含您的要求,您刚刚包含了您认为可以实现的SQL。

这个SQL:

select distinct mname 
from tb_reqmach  
where fromdate >= '2016/12/08' 
  and todate <= '2016/12/30' 
  and mcfact = 'BSC - 3' 
group by mname

只会获取稍后或等于12月8日 todate小于或等于12月30日的行。您的屏幕截图中没有此类行。

我的猜测是,您正在寻找能够获取有时在给定日期范围内有效的所有行的内容,并且这样做:

select distinct mname 
from tb_reqmach  
where fromdate <= '20161230'
  and todate >= '20161208'
  and mcfact = 'BSC - 3' 
group by mname

这也是您应该使用的日期格式,其他格式会受到区域设置的影响。