SQL Server DateTime數(shù)據(jù)類型的另類解讀
此文章主要向大家講述的是另類解讀SQL Server DateTime數(shù)據(jù)類型,看到這個標(biāo)題,你可能會笑。其實(shí)這個問題看起,因?yàn)槟阋詾檫@個東西太小兒科了,還用得著做一個標(biāo)題?!我會笑,是因?yàn)槲掖_信你看完后會改變你的想法。
首先我引入一個問題:如何與一個DateTime類型的字段值進(jìn)行相等比較?
其實(shí)這個問題看起來容易,但有下面的問題存在:
1、一般來說,用戶輸入的日期值就是yyyy/mm/dd,不帶時(shí)、分、秒;
2、數(shù)據(jù)庫中存儲的日期值是帶時(shí)、分、秒的。
所以我必須假定:我們所謂的兩個日期相等就是年、月、日相等。
兩種方法:
1、有了這樣的假定,你我都會有這樣的想法:把兩個日期的年、月、日取出來分別比較就行了,三者相等即可(也可按統(tǒng)一格式做成一個串再比較)。
2、上面的方法雖然可行。但你會發(fā)現(xiàn)幾乎把日期函數(shù)用了個遍!不妨按下面的思路想一下:如果只指定日期,則時(shí)間默認(rèn)為 12:00 AM(午夜)(取自:SQL Server聯(lián)機(jī)幫助)。假定我們要查的日期是2004/7/10,則其實(shí)我們想要的就是這一天的00:00:00至23:59:59之間的。
提到之間,我們就會想到between...and!!只要 between 2004/7/10 and 2004/7/11 即可了。具體地說:between Cast('2004-7-10' as DateTime) and dateadd(day, 1, Cast('2004-7-10' as DateTime))。但這個方法有一個小小問題,它會把7/11 0點(diǎn)的東西也找到,而這其實(shí)不應(yīng)算做7/10的。如果你還想精益求精的話,就只能用...>=... and ...<... 了。(一般情況下沒有必要)
等于討論完后,再想想大于(或小于)某個日期,我們自然可以還用 between ... and 的,再一次論證上面方法的通用性。
注意:有了上面的討論,你一定明白了,and 后的日期一定要加一天,否則結(jié)束日期就不會查到了。
以上的相關(guān)內(nèi)容就是對SQL Server DateTime數(shù)據(jù)類型的介紹,望你能有所收獲。
上述的相關(guān)內(nèi)容就是對SQL Server DateTime數(shù)據(jù)類型的描述,希望會給你帶來一些幫助在此方面。
【編輯推薦】
- SQL Server自增字段插入值的步驟
- SQL Server 2005降級到2000的正確操作步驟
- SQL Server 2008 基于策略之管理大全
- SQL Server中數(shù)據(jù)該如何導(dǎo)入導(dǎo)出?
- SQL Server中用戶名與登錄名關(guān)系辨析談