我正在尝试使用此查询获取日期时差:
SELECT BASESCORE,
Max(CONVERT(DATETIME, '')) - Min(CONVERT(DATETIME, '')) AS datediff
FROM log
GROUP BY BASESCORE
ORDER BY BASESCORE
它运作正常,但它给出了我的错误:
1900-01-01 00:00:00.000
1900-01-01 00:00:00.000
1900-01-01 00:00:00.000
1900-01-01 00:00:00.000
1900-01-01 00:00:00.000
......
如何从上述查询中获得正确的结果!
答案 0 :(得分:3)
正如@Nithesh所说,尝试使用DATEDIFF
-
DECLARE @temp TABLE(
[datetime] DATETIME
, basescore INT
)
INSERT INTO @temp
VALUES
('20130320 03:17:43', 1),
('20130320 03:17:43', 2),
('20130320 04:17:43', 1),
('20130320 03:20:43', 2)
SELECT
basescore
, [datediff] = CONVERT(
VARCHAR(10),
DATEADD(ms,
DATEDIFF([second], MIN([datetime]), MAX([datetime])) * 1000,
0), 114)
FROM @temp
GROUP BY basescore
ORDER BY basescore
输出 -
basescore datediff
----------- ----------
1 01:00:00:0
2 00:03:00:0
答案 1 :(得分:3)
使用您发布的样本数据(并稍微调整一下),这是我尝试解决问题的方法:
SELECT BASESCORE,
Datediff(dd, MINDATE, MAXDATE)
FROM (SELECT BASESCORE,
Cast(Max(DATETIME) AS DATETIME) MaxDate,
Cast(Min(DATETIME) AS DATETIME) MinDate
FROM table1
GROUP BY BASESCORE)T
您可以查看SQL Fiddle上的完整工作版本。
让我知道是否有一些我误解的东西; - )
答案 2 :(得分:2)
之前您向您展示了dateformat,您再次删除了该格式,但我有时间复制它。 在我看来,这是您想要的查询和结果:
declare @t table(datetime char(20), basescore int)
insert @t values('20/Mar/2013:03:17:43', 1),('20/Mar/2013:03:17:43', 2)
('20/Mar/2013:04:17:43', 1),('20/Mar/2013:03:20:43', 2)
SELECT basescore, MAX(convertdate) - MIN(convertdate) AS datediff
-- when selecting from your own table remove '@t' from next line
FROM @t log
cross apply(select cast(stuff([datetime], 12, 1, ' ') as datetime) convertdate) a
group by basescore order by basescore
结果:
basescore datediff
1 1900-01-01 01:00:00.000
2 1900-01-01 00:03:00.000
答案 3 :(得分:1)
答案 4 :(得分:1)
我上次从您的帖子编辑中看到,来自字段日期时间的值,例如' 20 / Mar / 2013:03:17:44'。日期时间值的格式无法通过简单的方式进行转换。
尝试此查询:
SELECT BASESCORE,
[DATEDIFF]= Datediff(second, Min(CONVERT(DATETIME,
LEFT(Rtrim(Ltrim(DATETIME)),
11) + ' '
+ RIGHT(Rtrim(Ltrim(DATETIME)
), 8))), Max
(
CONVERT(DATETIME, LEFT(Rtrim(Ltrim(DATETIME)), 11
) + ' '
+ RIGHT(Rtrim(Ltrim(DATETIME)),
8))))
FROM temptabel
GROUP BY BASESCORE
ORDER BY BASESCORE
输出:
Basescore datediff
1 1
2 0
3 0
您可以在SQLFiddle
看到