如何在sql server中获取时间范围之间的日期

时间:2015-08-12 15:35:43

标签: sql sql-server

我需要编写一个存储过程,在其中我将获得开始日期和结束日期。例如:开始日期是05/07/2015,结束日期是28/08/2015。我需要编写一个查询,它将在2015年7月1日到2015年8月31日之间获取详细信息。它应该在为开始日期选择的月份的第一天和为结束日期选择的月份的最后一天之间获取详细信息。

这是我尝试过的,但它不起作用:

DATEDIFF(month,'2014-06-05','2014-08-05')

3 个答案:

答案 0 :(得分:0)

您可以使用常用运算符“<”来比较日期和“>”, 例如:

select * from table_name where '2014-06-05' < datefield and  datefield  < '2014-08-05'

答案 1 :(得分:0)

DECLARE @StartDate DATETIME

DECLARE @EndDate DATETIME

SET @StartDate = convert(DATE, '20140705' ,112)

SET @EndDate = convert(DATE, '20140828' ,112)

SELECT * FROM [TableName] WHERE [TableName].DateField BETWEEN 
    dateadd(d,-(datepart(d, @StartDate)-1),@StartDate) AND 
    dateadd(d,-1,dateadd(m,1, dateadd(d,-(datepart(d, @EndDate)-1),@EndDate)))

答案 2 :(得分:0)

听起来你需要找到2015年05月07日的第一天&#39;以及&#39; 28/08/2015&#39;的最后一天,然后使用这些作为where子句的限制。

这可以轻松地将日期转换为该月的第一天:

declare @firstDate datetime = '2015-07-05'
declare @firstOfMonth datetime = dateadd(month,datediff(month,0,@firstDate),0)
select @firstDate
-- returns '2015-07-01 00:00:00.000'

要到达一个月的最后一天,请使用:

declare @lastDate datetime = '2015-08-28'
declare @lastOfMonth datetime = dateadd(second,-1,dateadd(month,datediff(month,0,@lastDate)+1,0))
select @lastOfMonth
-- returns '2015-08-31 23:59:59.000'