Sql 返回不同的日期
早晨 我试图通过唯一标识符返回结果的不同日期 例如:Sql 返回不同的日期,sql,sql-server-2005,tsql,distinct,date,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|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执行distinct操作,因为这将只返回我的一个日期。所以我想返回:
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新手,所以很抱歉我可能犯了一个明显的错误。到目前为止,我已经通过搜索之前提出的问题获得了进展
一如既往,我们非常感谢您提供的任何帮助和指针。如果您使用的是Sql Server 2008-您可以将DateTime列转换为内置的
Date
类型,否则为了消除时间,您应该将时间转换为VARCHAR()
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
您可以使用T-SQLconvert
函数提取日期
试一试
那么,在你的情况下,你应该这样做
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
进一步资料:
希望这有帮助您确定这将返回日期部分之间带有分隔符的日期吗?
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