返回不同的日期
问题描述:
早上返回不同的日期
我想通过唯一标识返回结果的不同日期。
例如:
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等等道歉我可能犯了一个明显的错误。通过搜索以前提出的问题,我已经得到了很多。
像往常一样,任何帮助和指针,非常感谢。
答
您可以使用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
希望这有助于!
答
如果您使用的是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年进行吗? –
Sql Server的哪个版本? – sll
您好sql 2005 –