2011-11-24 80 views
1

早上返回不同的日期

我想通過唯一標識返回結果的不同日期。

例如:

ID|Date 
1 | 2011-10-01 23:57:59 
1 | 2011-10-01 23:58:59 
1 | 2010-10-01 23:59:59 
2 | 2010-09-01 23:59:59 
2 | 2010-09-01 23:58:29 
3 | 2010-09-01 23:58:39 
3 | 2010-10-01 23:59:14 
3 | 2010-10-01 23:59:36 

的時間不是重要的只是日期。因此,例如在ID 1上,我無法對ID做出明確的分析,因爲這隻會返回一個日期。所以,我希望回到:

1|2011-10-01 
1|2010-10-01 

我曾嘗試以下查詢:

Drop Table #Temp 

select Distinct DateAdd(dd, DateDiff(DD,0, Date),0) as DateOnly 
,ID 
Into #Temp 
From Table 

Select Distinct (Date) 
,ID 
From #Temp 

我得到不過結果如下:

ID|Date 
1 | 2011-10-01 00:00:00 
1 | 2011-10-01 00:00:00 
1 | 2010-10-01 00:00:00 

我是新來的SQL等等道歉我可能犯了一個明顯的錯誤。通過搜索以前提出的問題,我已經得到了很多。

像往常一樣,任何幫助和指針,非常感謝。

+1

Sql Server的哪個版本? – sll

+0

您好sql 2005 –

回答

2

您可以使用T-SQL convert函數抽取日期。

嘗試

CONVERT(char(10), GetDate(),126) 

所以,你的情況,做

Drop Table #Temp 

select Distinct CONVERT(char(10), DateAdd(dd, DateDiff(DD,0, Date),0), 126) as DateOnly 
,ID 
Into #Temp 
From Table 

Select Distinct (Date) 
,ID 
From #Temp 

進一步的信息:Getting the Date Portion of a SQL Server Datetime field

希望這有助於!

+0

你確定這會返回日期和日期部分之間的分隔符嗎? – sll

+0

是的,現在,我認爲是這樣;)謝謝 – dknaack

+0

謝謝dknaack,這是一種享受。 –

1

如果您使用的是SQL Server 2008中 - 你可以施放時間列到一個內置的Date類型,否則擺脫時候你應該轉換爲VARCHAR()僅日/月/年的部分,然後再轉換回datetime所以時間部分將被清零:

declare @dates table(id int, dt datetime) 
INSERT INTO @dates VALUES(1, '2011-10-01 23:57:49') 
INSERT INTO @dates VALUES(2, '2011-10-02 23:57:59') 
INSERT INTO @dates VALUES(2, '2011-10-02 23:57:39') 

SELECT stripped.id, stripped.dateOnly 
FROM 
(
    -- this will return dates with zeroed time part 2011-10-01 00:00:00.000 
    SELECT id, 
      CONVERT(datetime, 
      CAST(YEAR(dt) as VARCHAR(4)) + '-' + 
      CAST(MONTH(dt) AS VARCHAR(2)) + '-' + 
      CAST(DAY(dt) AS VARCHAR(2))) as dateOnly 
    FROM @dates 
) stripped 
GROUP BY stripped.id, stripped.dateOnly 
+0

感謝您的迴應,這項工作將在2005年進行嗎? –

相關問題