SqlServer查詢介於兩個值之間的資料記錄

2021-06-15 06:26:41 字數 2785 閱讀 3201

sql的between與查詢日期範圍的問題,今天將access轉sql時發現的問題。

資料 customer

idname

registerdate1澎澎

2007/1/5 00:00:002丁丁

2007/1/6 00:00:003亞亞

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呢?

如果資料是這樣

idname

registerdate1澎澎

2007/1/5 00:00:002丁丁

2007/1/6 04:37:003亞亞

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之間的記錄

sql server的兩個型別轉換函式

今天遇到乙個sql的問題,條件中有個去當前月第一天 2013 8 23 0 00 00 很簡單cast dateadd dd,day getdate 1,getdate as date 結果麻煩大了,20多秒資料硬是沒寫進臨時表,後來怎麼辦呢,拿convert試試,好多了雖然也用了3秒鐘conver...

sqlserver 比較兩個表的列

一 問題 給了兩個各有四五十個列的表,找出他們相同的列和不同的列 二 查詢兩個表的列,存在臨時表 a b都是臨時表,當前連線斷開後自動刪除 rank over order hswpooby syscolumns.name desc as 是sql2005支援的,在每行記錄前加上自增序號 idenhs...

mysql 合併兩個查詢結果

顯然,查詢結果的time為主鍵,目的是將兩個查詢結果合成乙個結果。如果在 中實現,一次便利乙個表新增到另外乙個表中,效率非常低。那麼在mysql 中實現方式為 出金 withdraw select from select date complete time as time,sum amt as a...