上午
我试图通过一个独特的标识来返回结果的不同日期。
例如:
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的新手所以道歉我可能犯了一个明显的错误。到目前为止,我已经搜索了之前提出的问题。
一如既往,我们非常感谢任何帮助和指示。
答案 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