返回不同的日期

时间:2011-11-24 10:52:32

标签: sql sql-server-2005 tsql distinct date

上午

我试图通过一个独特的标识来返回结果的不同日期。

例如:

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的新手所以道歉我可能犯了一个明显的错误。到目前为止,我已经搜索了之前提出的问题。

一如既往,我们非常感谢任何帮助和指示。

2 个答案:

答案 0 :(得分: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

希望这有帮助!

答案 1 :(得分:1)

如果您使用的是Sql Server 2008,则可以将DateTime列转换为内置的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