iT邦幫忙

0

SQL 用目前日期尋找DB兩個月內快到的資料

select * from school Where testtime  <= datediff(MONTH,-2,getdate())

select * from school Where testtime  <= dateadd(MONTH,-2,getdate())

上面datediff 連邏輯都不用塞顯示時間就錯了
下面單獨執行看目前日期+1 -1都正常
我要從school裡面找出目前日期+2個月就到期的資料
但我撈出來的資料都不是11/19 ~ 1/19的資料 請問上面邏輯錯在哪?

效能小建議
時間條件改成Between

declare @testtimeS datetime = dateadd(MONTH,2,getdate())
declate @testtimeE datetime = getdate()

select * from school where testtime between @testtimeS and @testtimeE
或是
select * from school where testtime >= @testtimeS

參考資料
https://bigone2000.pixnet.net/blog/post/56194164
8.應儘量避免在where子句中對欄位進行函數操作,這將導致引擎放棄使用索引而進行全表掃描。
0
allenlwh
iT邦研究生 1 級 ‧ 2019-11-19 21:18:57
最佳解答

應該是這樣:testtime 介於 2019/11/19 ~ 2020/1/19

select * from school 
    Where testtime >= getdate()
    and testtime <= dateadd(MONTH,2,getdate())
0
小魚
iT邦大師 1 級 ‧ 2019-11-19 20:24:43

如果你用的是

select * from school Where testtime  <= dateadd(MONTH,2,getdate())

抓出來的應該是全部小於1/19的資料,
因為你沒有設下限給他.

0
純真的人
iT邦高手 1 級 ‧ 2019-11-20 10:06:12
declare @school table(
	testtime date
)

insert into @school
values('2020/2/5')
,('2020/1/4')
,('2020/3/3')
,('2019/12/8')
,('2020/4/24')

select * from @school Where datediff(m, Convert(date,GetDate()), Convert(date,testtime) ) <= 2

https://ithelp.ithome.com.tw/upload/images/20191120/20061369q4IVj63cLp.png

我要發表回答

立即登入回答