8

我正在使用以下 SQL 查询从表中获取过去 7 天的数据。

SELECT * 
FROM   emp 
WHERE  date >= (SELECT CONVERT (VARCHAR(10), Getdate() - 6, 101)) 
       AND date <= (SELECT CONVERT (VARCHAR(10), Getdate(), 101)) 
ORDER  BY date 

表中的数据也是去年的数据。

问题是我得到日期列的输出为

10/11/2013
10/12/2012
10/12/2013
10/13/2012
10/13/2013
10/14/2012
10/14/2013
10/15/2012
10/15/2013
10/16/2012
10/16/2013
10/17/2012
10/17/2013

我不想要2012一年的输出。请建议如何更改查询以获取今年最后 7 天的数据。

4

3 回答 3

9

而不是将 a 转换date为 avarchar并将 avarchar与 a进行比较varchar。将 转换varchar为 a datetime,然后以这种方式进行比较。

SELECT 
    * 
FROM   
    emp 
WHERE   
    convert(datetime, date, 101)  BETWEEN (Getdate() - 6) AND Getdate() 
ORDER BY 
    date 
于 2013-10-17T15:56:53.143 回答
5

为什么在处理日期时转换为 varchar?试试这个:

DECLARE @Now DATETIME = GETDATE();
DECLARE @7DaysAgo DATETIME = DATEADD(day,-7,@Now);

SELECT * 
FROM   emp 
WHERE  date BETWEEN @7DaysAgo AND @Now
ORDER  BY date 
于 2013-10-17T15:34:35.970 回答
-1

简单地使用它。

 Select columnname
        from tablename
            WHERE datecolumn> dateadd(day,-7,GETDATE()) 
于 2016-06-26T15:46:42.810 回答