这是我当前的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日,我的表中有四条记录:
如何在给出from和to日期以及两者都为null时的日期范围之间获得所需的记录。我做错了什么?
答案 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)
/* 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)