民國 100 年危機

如同公元 2000 年,這鐵定是個商機,將有很多系統進入 "既然要解決這個問題,就一併更新…" 等流程。而部分系統應當是老舊的重要系統,否則也不用維繫到今了…

而這份商機僅有台灣,全世界的原廠都不會太 care 其內的技術問題,只有靠我們自己解決…。所以,從現在開始關心這個問題是必要的,否則如 Perter Hu 說的,到那一天我們就獨立了,從元年開始計年…

最近參與了民國 100 對 SQL Server 影響的討論,個人淺見如下:

SQL DB Engine 存的一定是西元紀年,Datetime 資料型態的範圍是 "西元 1753 年 1 月 1 日到 9999 年 12 月 31 日"。民國年不是 SQL 的問題,是 Programmer 如何存取的問題(所以就算微軟想要幫忙,著力點也不大吧)。

但依然有人比較 SQL 2000 和 2005 管理介面上對日期的存取之差異,例如,若 Windows 的地區選項設為中華民國曆

image

SQL Server 2005 的 Management Studio 可以輸入 101/1/1(SQL Server 2000 的 Enterprise Manager 不會參照 Windows 系統設定,所以直接傳回錯誤),也就是當成民國年來解釋:

image

但 SSMS 是前端工具程式,因為會參照作業系統的國別日期,所以 UI 寫 ‘101/1/1’ 實際底層執行的 T- SQL 是:
exec sp_executesql N’INSERT INTO t(c1) VALUES (@c1)’,N’@c1 datetime’,@c1=’2012-01-01 00:00:00:000′
而 SSMS 不足以代表 SQL Server…

使用者跟 SQL Server 溝通主要是靠 Programmer 寫得程式,而 SQL Server 2005 依然不接受 T-SQL:
insert t values(‘101/1/1’)

執行後,得到以下的錯誤:
訊息 242,層級 16,狀態 3,行 1
char 資料類型轉換成 datetime 資料類型時,產生超出範圍的 datetime 值。

SQL Server 會以為是西元 101 年,除非 Programmer 自己加了 1911。

SQL Server 2008 的 Date 資料型態範圍是 “西元 1  年 1 月 1 日到 9999 年 12 月 31 日”。或許 Programmer 可以自行解釋,把西元 1 年當民國 1 年,但相差 1911 年,應該會有閏年的問題。

3 Comments

  1. 先民
    Posted 2008 年 07 月 12 日 at 14:41:49 | Permalink | 回覆

    可能到時要自己寫資料型別… datetime資料型別…
    想個好聽的名字吧…. TaiwanDateTime 如何?
     
    這個用 .net寫看看吧….

  2. 百敬
    Posted 2008 年 07 月 15 日 at 06:26:37 | Permalink | 回覆

    哇,好主意,可以當作人培班的作業嗎🙂

  3. Unknown
    Posted 2008 年 09 月 07 日 at 05:13:46 | Permalink | 回覆

    Hi,Do you need advertising displays, screen advertisings, digital sign, digital signages and LCDs? Please go Here:www.amberdigital.com.hk(Amberdigital).we have explored and developed the international market with professionalism. We have built a widespread marketing network, and set up a capable management team dedicated to provide beyond-expectation services to our customers.
    amberdigital Contact Us
    E-mail:sstar@netvigator.com
    website:www.amberdigital.com.hk
    alibaba:amberdigital.en.alibaba.com[dcaahd

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: