选择最小和最大日期,时间仅提供日期部分(yyyy / MM / dd)

时间:2015-06-30 11:10:48

标签: sql sql-server

2012-11-23 05:49:26.000  
2012-11-23 07:55:43.000  
2012-11-23 13:59:56.000  
2012-11-26 07:51:13.000  
2012-11-26 10:23:31.000  
2012-11-26 10:25:09.000  
2012-11-26 16:22:22.000  
2012-11-27 07:30:03.000  
2012-11-27 08:53:47.000  
2012-11-27 10:40:55.000  

当我通过2012-11-27 ....我想要输出分钟2012-11-27 07:30:03.000,最大2012-11-27 10:40:55.000

3 个答案:

答案 0 :(得分:2)

您需要了解的是日期比较:

select min(col), max(col)
from table t
where col >= '2012-11-27' and
      col < dateadd(day, 1, '2012-11-27');

使用两个比较非常有意识地完成日期比较:

where cast(col as date) = '2012-11-27'

第一种方法是一个好习惯,因为它更有可能导致SQL Server在列上使用索引,特别是对于更复杂的表达式。

答案 1 :(得分:0)

Select   Max(DateAttribute)
        ,Min(DateAttribute)
From    Table As t
Where   Dateadd(D, 0, Datediff(D, 0, DateAttribute)) = @DateFilter  ----your parameter
上面的

也可以在SQL Server 2005中使用,无需任何更改。

答案 2 :(得分:0)

我喜欢使用between关键字进行日期比较。我还提供了一个与您的数据匹配的示例表声明。

DECLARE @tempDates AS TABLE (myDate DATETIME)

INSERT INTO @tempDates VALUES
('2012-11-23 05:49:26.000'),
('2012-11-23 07:55:43.000'),  
('2012-11-23 13:59:56.000'),  
('2012-11-26 07:51:13.000'),  
('2012-11-26 10:23:31.000'),  
('2012-11-26 10:25:09.000'),  
('2012-11-26 16:22:22.000'),  
('2012-11-27 07:30:03.000'),  
('2012-11-27 08:53:47.000'),  
('2012-11-27 10:40:55.000')

SELECT 
    MIN(myDate) AS 'Min', MAX(myDate) AS 'Max' 
FROM 
    @tempDates 
WHERE 
    myDate BETWEEN CONVERT(DATETIME, '2012-11-27') 
    AND DATEADD(D,1, CONVERT(DATETIME, '2012-11-27'))