0

2 つの日付の間のすべての異なる日を返す次の SQL を取得しました。

SELECT DISTINCT convert(char(10), date, 120) as StartDate from table1 WHERE  
id = @id and date > @StartDate

ただし、2 つの日付の間の異なる日付と時間を返す必要があります。

いえ

2011-12-18 13:00:00.000

2011-12-18 14:00:00.000

2011-12-18 17:00:00.000

2011-12-19 10:00:00.000

2011-12-19 12:00:00.000

2011-12-19 13:00:00.000

これを行うためにクエリを変更する際に誰かが支援できることを望んでいました。

4

3 に答える 3

2
SELECT DISTINCT DATEADD(HH,DATEDIFF(HH,0,DATE),0) as StartDate 
from table1 
WHERE   id = @id and date > @StartDate 
于 2012-05-15T13:56:54.197 に答える
0
declare @myDates table(d datetime);
INSERT INTO @myDates VALUES('2011-12-18 13:00:00.000')
, ('2011-12-18 14:00:00.000')
, ('2011-12-18 17:00:00.000')
, ('2011-12-19 10:00:00.000')
, ('2011-12-19 12:00:00.000')
, ('2011-12-19 13:00:00.000');

; WITH a AS (
    SELECT d, r=ROW_NUMBER()OVER(ORDER BY d)
    FROM @myDates
)
SELECT StartDate=CONVERT(VARCHAR(10),a1.d,120)
, EndDate=CONVERT(VARCHAR(10),a2.d,120)
, HoursDiff=DATEDIFF(hh,a1.d,a2.d)
FROM a a1
INNER JOIN a a2 
  ON a2.r=a1.r+1 
  AND CONVERT(VARCHAR(10),a1.d,120)<>CONVERT(VARCHAR(10),a2.d,120);

結果:

StartDate  EndDate    HoursDiff
---------- ---------- -----------
2011-12-18 2011-12-19 17
于 2012-05-15T14:03:45.157 に答える
0

私は次のことをします:

SELECT DISTINCT left(convert(varchar, date, 120), 13) as starthour
from table
WHERE   id = @id and date > @StartDate

SQL Server の datepart() 関数を使用して、同様のものを考え出すこともできます。他のデータベースでは、extract( from ) を使用することをお勧めします。

于 2012-05-15T13:58:45.693 に答える