视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MSSQLSERVER中的BETWEENAND的使用
2020-11-09 07:15:32 责编:小采
文档


資料 Customer

Id Name RegisterDate
1 澎澎 2007/1/5 00:00:00
2 丁丁 2007/1/6 00:00:00
3 亞亞 2007/1/7 00:00:00

aspx頁面查詢條件:

最小日期: [2007-01-06]      最大日期: [2007-01-06]

使用的 sql:

SELECT ID, Name, RegisterDate
FROM Customer
WHERE (RegisterDate BETWEEN '2007-01-06' AND '2007-01-06')

結果是傳回1筆:丁丁, 符合我的預期

但是 如果丁丁的RegisterDate 的時間 不是00:00:00呢?

如果資料是這樣

Id Name RegisterDate
1 澎澎 2007/1/5 00:00:00
2 丁丁 2007/1/6 04:37:00
3 亞亞 2007/1/7 00:00:00

一樣的sql

SELECT ID, Name, RegisterDate
FROM Customer
WHERE (RegisterDate BETWEEN '2007-01-06' AND '2007-01-06')

傳回來的是0筆

 

嗯,因為我沒有給予正確的時間範圍嘛,我的查詢條件應該是2007/1/6 號整天時間範圍。

所以我通常程式在查詢前,都會先幫日期加1天

RegisterMaxDate = RegisterMaxDate.AddDays(1);

但是,這樣就對了嗎??

這樣的程式產生的sql是

SELECT ID, Name, RegisterDate
FROM Customer
WHERE (RegisterDate BETWEEN '2007-01-06' AND '2007-01-07')

反而傳回2筆,把亞亞也傳回來了

因為 Sql 的 between min And max 是 value >=min && value <= max 的意思

所以我應該更精確的

RegisterMaxDate = RegisterMaxDate.AddDays(1).AddSeconds(-1);

那樣產生的sql 才會是

SELECT ID, Name, RegisterDate
FROM Customer
WHERE (RegisterDate BETWEEN '2007-01-06' AND '2007/1/6 23:59:59')

傳回1筆,也就是丁丁,我要的資料。


4.3.5  限定数据范围——BETWEEN

在WHERE子句中,使用BETWEEN关键字可以更方便地查询数据的范围。当然,还可以使用NOT BETWEEN关键字查询限定数据范围之外的记录。


语法格式可表示如下:

 表达式[NOT] BETWEEN 表达式1 AND 表达式2
 

比如,选择范围在10~100之间的数,采用BETWEEN运算符可以表示为BETWEEN 10 AND 100。

★ 注意 ★

使用BETWEEN查询数据范围时同时包括了边界值,而使用NOT BETWEEN进行查询时没有包括边界值。

实例20  使用BETWEEN限定数据范围查询

本实例实现在BookInfo表中,查询图书价格在35~60之间的所有图录。代码如下:

 USE Library
SELECT *
FROM BookInfo
WHERE price BETWEEN 35 AND 60
运行该代码,得到的查询结果如图4.21所示。
 
图4.21  查询BookInfo表中图书价格在35~60之间的记录


从结果可见,使用BETWEEN关键字查询包含了边界值。

实际上,使用BETWEEN表达式进行查询的效果完全可以用含有“>=”和“<=”的逻辑表达式来代替,使用NOT BETWEEN进行查询的效果完全可以用含有“>”和“<”的逻辑表达式来代替。

对于实例20,若采用含有“>=”和“<=”的逻辑表达式来代替BETWEEN表达式,代码如下:

USE Library
SELECT *
FROM BookInfo
WHERE price >=35
AND price <=60

执行该代码,会得到同样的查询结果。

使用BETWEEN运算符也可以实现时间的比较,下面就给出一个具体的应用实例。

实例21  使用BETWEEN运算符限定时间范围查询

本实例实现在BookInfo表中,查询出版日期在2004/5/1和2006/1/1之间的所有图录。代码如下:

USE Library
SELECT *
FROM BookInfo
WHERE pubdate BETWEEN '2004/5/1' AND '2006/1/1'
运行该代码,得到的查询结果如图4.22所示。
 
图4.22  查询BookInfo表中出版日期在2004/5/1和2006/1/1之间的记录

下载本文
显示全文
专题