測(cè)試數(shù)據(jù)庫(kù)是sql server 2019.
簡(jiǎn)單創(chuàng)建一個(gè)表论悴,只有主鍵自增id和datetime類型的列狞玛。
插入數(shù)據(jù)
insert into testdb(timecol) values('2020-01-02 00:00:00')
insert into testdb(timecol) values('2020-01-03 23:59:59')
insert into testdb(timecol) values('2020-01-03 23:59:59.993')
insert into testdb(timecol) values('2020-01-03 23:59:59.994')
insert into testdb(timecol) values('2020-01-03 23:59:59.995')
insert into testdb(timecol) values('2020-01-03 23:59:59.996')
insert into testdb(timecol) values('2020-01-03 23:59:59.997')
insert into testdb(timecol) values('2020-01-03 23:59:59.998')
insert into testdb(timecol) values('2020-01-03 23:59:59.999')
select * from testdb;
查詢結(jié)果如下
注意,我是連續(xù)插入毫秒精度是993到999幸海,數(shù)據(jù)庫(kù)顯示的結(jié)果是不一樣诅病。
如上圖 可以知道datetime類型的不怎么支持毫秒精度揍魂。時(shí)間范圍 00:00:00 到 23:59:59.997
參考官網(wǎng): https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/datetime-transact-sql?view=sql-server-ver15
如果想查詢時(shí)間范圍的內(nèi)數(shù)據(jù),比如說(shuō)1月3日所有的數(shù)據(jù)檩电,我們現(xiàn)在采用>= and <=方式來(lái)查詢(這里不考慮用between and拄丰,結(jié)果跟>= and <=是一樣的)
如上圖,由于沒(méi)寫毫秒精度俐末,有些數(shù)據(jù)查不到了(如圖3到8條數(shù)據(jù))料按。而且查詢第二天也就是4日的數(shù)據(jù)也不包含。
當(dāng)然你可以把精度帶上卓箫,能實(shí)現(xiàn)你想要的結(jié)果载矿,如下
但你可能覺得上面有點(diǎn)啰嗦,可以試試下面的方法采用>= and <方式來(lái)查詢,可以查詢到目標(biāo)數(shù)據(jù)闷盔。
綜上弯洗, 推薦用>= and <方式來(lái)查詢datetime時(shí)間范圍的數(shù)據(jù)
如果你對(duì)毫秒有要求,可以用datetime2類型的字段
擴(kuò)展說(shuō)一下逢勾,有些朋友可能會(huì)為什么不用函數(shù)轉(zhuǎn)換成字符串或日期的數(shù)字來(lái)比較牡整?只要是sql帶有函數(shù)效率都會(huì)低,這里盡量不要做轉(zhuǎn)換溺拱;還有加索引什么的逃贝,不是咱本文討論的范圍。