例如,可以
SELECT foo
FROM bar
WHERE foo BETWEEN 5 AND 10
选择5和10,否则它们将被排除在范围之外?
例如,可以
SELECT foo
FROM bar
WHERE foo BETWEEN 5 AND 10
选择5和10,否则它们将被排除在范围之外?
当前回答
SQL Server 2008的真实例子。
源数据:
ID Start
1 2010-04-30 00:00:01.000
2 2010-04-02 00:00:00.000
3 2010-05-01 00:00:00.000
4 2010-07-31 00:00:00.000
查询:
SELECT
*
FROM
tbl
WHERE
Start BETWEEN '2010-04-01 00:00:00' AND '2010-05-01 00:00:00'
结果:
ID Start
1 2010-04-30 00:00:01.000
2 2010-04-02 00:00:00.000
其他回答
我一直用这个:
WHERE myDate BETWEEN startDate AND (endDate+1)
如果你按了这个,并且真的不想尝试处理在代码中添加一天,那么让DB来做。
myDate >= '20090101 00:00:00' AND myDate < DATEADD(day,1,'20090101 00:00:00')
如果你确实包含了时间部分:确保它指向午夜。否则,你可以简单地省略时间:
myDate >= '20090101' AND myDate < DATEADD(day,1,'20090101')
不用担心。
是的,但是在使用between表示日期时要小心。
BETWEEN '20090101' AND '20090131'
真的被解释为凌晨12点,还是
BETWEEN '20090101 00:00:00' AND '20090131 00:00:00'
所以会错过1月31日当天发生的任何事情。在这种情况下,你必须使用:
myDate >= '20090101 00:00:00' AND myDate < '20090201 00:00:00' --CORRECT!
or
BETWEEN '20090101 00:00:00' AND '20090131 23:59:59' --WRONG! (see update!)
更新:完全有可能在一天的最后一秒内创建记录,日期时间晚至20090101 23:59:59.997!!
因此,不建议使用BETWEEN(第一天)AND(最后一天23:59:59)方法。
使用myDate >= (firstday) AND myDate < (Lastday+1)方法代替。
关于这个问题的好文章在这里。
SQL Server 2008的真实例子。
源数据:
ID Start
1 2010-04-30 00:00:01.000
2 2010-04-02 00:00:00.000
3 2010-05-01 00:00:00.000
4 2010-07-31 00:00:00.000
查询:
SELECT
*
FROM
tbl
WHERE
Start BETWEEN '2010-04-01 00:00:00' AND '2010-05-01 00:00:00'
结果:
ID Start
1 2010-04-30 00:00:01.000
2 2010-04-02 00:00:00.000
它确实包括界限。
declare @startDate date = cast('15-NOV-2016' as date)
declare @endDate date = cast('30-NOV-2016' as date)
create table #test (c1 date)
insert into #test values(cast('15-NOV-2016' as date))
insert into #test values(cast('20-NOV-2016' as date))
insert into #test values(cast('30-NOV-2016' as date))
select * from #test where c1 between @startDate and @endDate
drop table #test
RESULT c1
2016-11-15
2016-11-20
2016-11-30
declare @r1 int = 10
declare @r2 int = 15
create table #test1 (c1 int)
insert into #test1 values(10)
insert into #test1 values(15)
insert into #test1 values(11)
select * from #test1 where c1 between @r1 and @r2
drop table #test1
RESULT c1
10
11
15