2015-05-04 95 views
1

我想獲得startendEnddate之間的所有日期。我使用它們來獲得所需的結果。但是在跳過當前日期的函數之間。如何獲得SQL Server中兩個日期之間的所有日期

Declare @StartDate Datetime ='2014-04-01 11:13:37' 
       ,@EndDate datetime ='2014-04-04 11:13:37' 

查詢: -

Select * from table where date between @Startdate and @EndDate 

當前結果: -

2014-04-02 11:13:37 
2014-04-03 11:13:37 
2014-04-04 11:13:37 

預期結果: -

2014-04-01 11:13:37 
2014-04-02 11:13:37 
2014-04-03 11:13:37 
2014-04-04 11:13:37 
+2

你可以給你的表中的日期列的一些數據示例?它是否也包含毫秒? –

+1

它不應該發生。 *之間的*子句包括兩個邊界。在您的數據庫中檢查** 4月1日的數據** –

回答

0

你可以試試這個

Declare @StartDate Date ='2014-04-01' 
       ,@EndDate date ='2014-04-04' 

        (OR) 

Declare @StartDate Datetime ='2014-04-01 00:00:00' 
       ,@EndDate datetime ='2014-04-04 12:59:59' 

查詢: -

Select * from table where date between @Startdate and @EndDate 
+0

只要您知道第一個選項將不起作用,因爲您的@EndDate將以00:00:00的時間轉換爲DATETIME。因此,在該日期的任何時間都不會被返回,因爲它會比@ EndDate大 – Stephan

0

您可以創建這樣一個過程:

CREATE PROCEDURE getAllDaysBetweenTwoDate 
    (
    @StartDate DATETIME,  
    @EndDate DATETIME 
    ) 
    AS 
    BEGIN 

     DECLARE @TOTALCount INT 
     SET @StartDate = DATEADD(DAY,-1,@StartDate) 
     Select @TOTALCount= DATEDIFF(DD,@StartDate,@EndDate); 

     WITH d AS 
       (
        SELECT top (@TOTALCount) AllDays = DATEADD(DAY, ROW_NUMBER() 
        OVER (ORDER BY object_id), REPLACE(@StartDate,'-','')) 
        FROM sys.all_objects 
       ) 
      SELECT AllDays From d 

     RETURN 
    END 
    GO 

禮貌:Find All the Days Between Two Dates

0

您所查詢的工作對我來說非常完美。

DECLARE @StartDate DATETIME = '2014-04-01 11:13:37', 
     @EndDate DATETIME = '2014-04-04 11:13:37'; 

WITH cte_dates 
AS 
(
    SELECT DATEADD(MONTH,-1,@startDate) dates --get dates from a month before start date 
    UNION ALL 
    SELECT DATEADD(DAY,1,dates) 
    FROM cte_dates 
    WHERE dates < DATEADD(MONTH,1,@EndDate) --up to a month after end date 
) 

SELECT dates 
FROM cte_dates 
WHERE dates BETWEEN @Startdate AND @EndDate 

結果:

dates 
----------------------- 
2014-04-01 11:13:37.000 
2014-04-02 11:13:37.000 
2014-04-03 11:13:37.000 
2014-04-04 11:13:37.000 

這意味着,它可能與你的數據的問題,具體的時間段。如果你不需要看時間,只需要特定的日期,那麼試試這個:

DECLARE @StartDate DATE = '2014-04-01', 
     @EndDate DATE = '2014-04-04'; 

SELECT * 
FROM yourTable 
WHERE CAST([date] AS DATE) BETWEEN @startDate AND @EndDate 
相關問題