检索两个给定日期之间的日期

时间:2014-11-13 13:12:51

标签: sql sql-server-2008

这是我当前的SQL查询:

DECLARE
@FromDate datetime=NULL,
@ToDate datetime=NULL


SET @FromDate = '10/11/2014'
SET @ToDate = '11/11/2014'

SELECT *
FROM
    tblUSer
WHERE
    ((convert(VARCHAR(10), CreatedDate, 103) BETWEEN convert(VARCHAR(10), @FromDate, 103) AND convert(VARCHAR(10), @ToDate, 103))

但是我在执行此查询后只获得了两条记录,即2014年11月11日,我的表中有四条记录:

enter image description here

如何在给出from和to日期以及两者都为null时的日期范围之间获得所需的记录。我做错了什么?

5 个答案:

答案 0 :(得分:0)

您正在使用的CONVERT语句不是必需的。以下内容适用:

SELECT *
FROM
    tblUSer
WHERE
    CreatedDate BETWEEN @FromDate And @ToDate

另外,请记住,如果不指定时间,则默认为午夜。因此,ToDate实际上是' 11/11/2014 00:00:00'。您的查询结果应该只是一行(第一行),因为其他行发生在2014年11月11日的午夜之后。

您还声明FromDate和ToDate可能为空。在这种情况下,您应该根据需要将它们设置为较低和较高的边界值,以返回所需的结果。

答案 1 :(得分:0)

尝试此查询:

DECLARE @FromDate AS datetime, @ToDate AS datetime


SET @FromDate = '12/12/2008'
SET @ToDate = '12/12/2009'

SELECT *
FROM tblUSer
WHERE CreatedDate BETWEEN @FromDate AND @ToDate

答案 2 :(得分:0)

来自this similar question

/* Variables*/
    DECLARE
        @FromDate datetime=NULL,
        @ToDate datetime=NULL

    SET @FromDate = '10/11/2014'
    SET @ToDate = '11/11/2014'

/* Sample Data */
    ; WITH tblUser AS 
      (
        SELECT CreatedDate 
        FROM 
          (
            VALUES
                ('2014-11-10 15:47:21.755'),
                ('2014-11-11 16:27:24.790'), 
                ('2014-11-11 18:21:10.810'), 
                ('2014-11-13 18:31:10.583')
          ) AS Value(CreatedDate))

/* Actual Query */
    SELECT *
    FROM
        tblUSer
    WHERE
        CreatedDate >= @FromDate AND
        CreatedDate <  DATEADD(DAY, 1, @ToDate)

/* Works because:*/
    PRINT 'This ToDate value will return no records from 11/11 beyond something created exactly at midnight:'
    PRINT @ToDate

    PRINT 'This value would return all records created at any time within 11/11:'
    PRINT DATEADD(DAY, 1, @ToDate)

答案 3 :(得分:0)

首先,不需要在sql查询中将日期转换为varchar

其次,记录具有不同的日期格式('yyyy-mm-dd'),而您提供的值具有'dd-mm-yyyy'格式,这可能是个问题。

这就是我使用它的方式

select dateColumn,* from TABLename where dateColumn between'YYYY-MM-DD' and 'YYYY-MM-DD'

它适用于我:)

答案 4 :(得分:0)

这对我有用

DECLARE
@FromDate datetime=NULL,
@ToDate datetime=NULL


SET @FromDate = '10/11/2014'
SET @ToDate = '11/11/2014'

SELECT *
FROM
    tblUSer
WHERE
    CreatedDate >= @FromDate AND
    CreatedDate <=  DATEADD(DAY, 1, @ToDate)