?? sql server 6.5
字號(hào):
作者:IP浪子
日期:99-5-26 下午 09:42:53
SQL Server 6.5對(duì)2000年問題的支持
中科院軟件所 韓歐
隨著2000年的逼近,使系統(tǒng)順利地過渡到下一世紀(jì)已經(jīng)是越來越迫切的問題。這項(xiàng)工程的復(fù)雜性是出乎人們預(yù)料的,原因之一是日期問題會(huì)涉及到系統(tǒng)的各個(gè)方面,包括硬件時(shí)鐘、BIOS設(shè)置、操作系統(tǒng)軟件、數(shù)據(jù)庫管理系統(tǒng)及其它應(yīng)用程序等。
數(shù)據(jù)庫管理系統(tǒng)作為2000年(簡(jiǎn)稱Y2K)問題的重要環(huán)節(jié)之一,對(duì)整個(gè)系統(tǒng)的順利過渡影響很大。我們?cè)谶x擇數(shù)據(jù)庫管理系統(tǒng)構(gòu)建應(yīng)用時(shí),應(yīng)該對(duì)是否支持2000年問題進(jìn)行全面的考察。
Microsoft SQL Server 6.5作為一個(gè)企業(yè)級(jí)的基于客戶機(jī)/服務(wù)器結(jié)構(gòu)的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),可以較好地處理2000年問題(可參看Http://www.microsoft.com/cio/articles/y ear2000.htm)。下面我們從MS SQL Server 6.5中對(duì)datetime類型數(shù)據(jù)的處理方法著手,來看看MS SQL Server 6.5對(duì)2000年前后日期的處理。
MS SQL Server 6.5中能夠存儲(chǔ)的日期數(shù)據(jù)類型有兩種:Datetime和Smalldatetime,它們能夠處理的日期范圍和精度不同。日期數(shù)據(jù)在機(jī)內(nèi)表示時(shí)是采用序列化的方法,即用整型值記錄日期距離某年某月某日的天數(shù)和時(shí)間距離某一時(shí)刻的秒數(shù)或毫秒數(shù)。具體來說,Date time 數(shù)據(jù)類型采用兩個(gè)四字節(jié)的整型數(shù)來分別存儲(chǔ)距離1900年1月1日的天數(shù)(正數(shù)或負(fù)數(shù))和距離12:00:00:000AM(午夜)的毫秒數(shù),能存儲(chǔ)的日期范圍從1753年1月1日到9999年12 月31日。Smalldatetime 數(shù)據(jù)類型采用兩個(gè)兩字節(jié)的短整型數(shù)來分別存儲(chǔ)距離1900年1月1日的天數(shù)(正數(shù))和距離12:00AM(午夜)的分鐘數(shù),能存儲(chǔ)的日期范圍從1900年1月1日到207 9年6月6日。這種以序列化的方法存儲(chǔ)日期的機(jī)制使得能夠保存的日期范圍很大,不受兩位數(shù)字的影響,日期表示是否準(zhǔn)確和能否過渡到下一世紀(jì)并無必然的聯(lián)系。 這種機(jī)制為構(gòu)建在MS SQL Server 6.5之上的應(yīng)用能夠正確處理2000年問題提供了技術(shù)上的保障,不但使應(yīng)用可以正確地存儲(chǔ)和顯示2000年前后的日期,而且可以保證系統(tǒng)中涉及到日期的其它功能也不會(huì)因?yàn)?000年的到來而出現(xiàn)混亂,比如,2000年前后的記錄可以正確地以日期排序;2000 年以前所做的備份可以正確地恢復(fù)到2000年后的系統(tǒng)中等等。
另外閏年處理也是2000年問題的一個(gè)重要環(huán)節(jié)。計(jì)算某一年是否是閏年的正確方法是:
(1)可以被4整除的年是閏年;
(2)但是,可以被100整除的年不是閏年;
(3)但是,可以被400整除的年是閏年。
某些設(shè)計(jì)不良的系統(tǒng)由于漏掉了第3條規(guī)則,而無法將2000年認(rèn)作閏年。這樣的錯(cuò)誤不但會(huì)影響存儲(chǔ)和顯示,而且會(huì)影響到幾乎所有涉及日期的計(jì)算,比如,計(jì)算某一日是一周中的第幾天。在這方面,MS SQL Server 6.5提供了正確的計(jì)算閏年的方法, 提供了一些能夠操縱日期和時(shí)間數(shù)據(jù)的函數(shù),如使用DATEPART(weekday,date)可以計(jì)算給定日期是一周中的第幾天。利用這些函數(shù),程序開發(fā)人員可以方便而準(zhǔn)確地在應(yīng)用程序中處理日期和時(shí)間數(shù)據(jù)。
在MS SQL Server 6.5中,為方便用戶輸入日期時(shí)間數(shù)據(jù),允許只輸入日期或只輸入時(shí)間,系統(tǒng)提供相應(yīng)的缺省。在輸入日期信息時(shí),允許只輸入兩位數(shù)表示年,系統(tǒng)采用缺省的世紀(jì),四位數(shù)的年又可以覆蓋兩位數(shù)。具體來講,SQL Server 6.5中可以接受的表示日期數(shù)據(jù)的格式有許多種,列舉如下:
Apr[il] [15][,] 1998
Apr[il] 15[,] [19]98
Apr[il] 1998 [15]
Apr[il] [19]98 15
[15] Apr[il][,] 1998
15 Apr[il][,][19]98
15 [19]98 apr[il]
[15] 1998 apr[il]
1998 APR[IL] [15]
[19]98 APR[IL] 15
1998 [15] APR[IL]
[0]4/15/[19]98 (mdy)
[0]4-15-[19]98 (mdy)
[0]4.15.[19]98 (mdy)
[04]/[19]98/15 (myd)
15/[0]4/[19]98 (dmy)
15/[19]98/[0]4 (dym)
[19]98/15/[0]4 (ydm)
[19]98/[04]/15 (ymd)
其中許多種格式接受以2位數(shù)表示的年份,如果輸入的2位數(shù)年份小于50,則缺省被認(rèn)為是21世紀(jì)的年份;如果輸入的2位數(shù)年份大于等于50,則會(huì)被認(rèn)為是20世紀(jì)的年份,當(dāng)然可以通過輸入4位數(shù)的年份來覆蓋這種缺省。這種處理方法會(huì)給開發(fā)人員和用戶帶來許多方便。
從以上的敘述我們可以看出,如果采用MS SQL Server 6.5作為后臺(tái)數(shù)據(jù)庫開發(fā)應(yīng)用程序,會(huì)為順利過渡到下一世紀(jì)帶來許多方便。但我們并不能認(rèn)為用MS SQL Server 6.5構(gòu)造的應(yīng)用系統(tǒng)就完全不存在2000年的問題,這主要是因?yàn)?000年問題遠(yuǎn)遠(yuǎn)不僅涉及到數(shù)據(jù)庫管理系統(tǒng),還涉及到整個(gè)軟硬件系統(tǒng)的許多方面,比如硬件的BIOS設(shè)置、操作系統(tǒng)軟件以及應(yīng)用程序的開發(fā)等等,所以我們?nèi)孕枰宰钪?jǐn)慎的態(tài)度來考察整個(gè)系統(tǒng)的各方各面,以確保系統(tǒng)的順利過渡。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -