SQL Server的syslanguage表應用一例

-----------------------------------------------------------------------------------------------

作者:翁彥

歡迎轉載,請保留此申明信息。

歡迎聯繫我,[email protected]

----------------------------------------------------------------------------------------------

最近,在csdn論壇上,前後回答了兩位位朋友的問題,覺得有必要總結一下。

問題是這樣

1 SQL Server 2000是中文版的,想能按照英文方式顯示日期格式?

2 SQL Server 2000是中文版的,想能購顯示中文月名?

讓我們來分析一下,顯示日期格式肯定和language有關,而且應該和當前session的language設置有關,肯定和服務器,數據庫是否是中英文無關。

那麼第一個問題就很簡單了,

只需要

set language us_english
select convert(varchar(20),getdate(),107)
set language 簡體中文

結果如下

Changed language setting to us_english.
                    
--------------------
Sep 01, 2003

(所影響的行數爲 1 行)

已將語言設置改爲 簡體中文。

但是第二個問題,似乎就不行了,我們可以測試一下

set language 簡體中文

select convert(varchar(20),getdate(),107)

得到的卻是

09 01,2003

不是需要的九月。

這需要進一步分析了。數據庫支持的語言,應該有對應的日期月份簡寫的設置。

master.dbo.syslanguages就是存放了對應的信息。

可以查看以下syslanguages的結構

我們關心的是是其中的shortmonths和months這兩項。
我們看到簡體中文這一條,shortmonths,months都是01,02,03,...。

所以無論你怎麼設置language,結果都是09 而不會是九月。

解決方法,大家都想到了。對了就是修改系統表。

use master
sp_configure 'allow update','1'
go
reconfigure with override
go
update dbo.syslanguages
set shortmonths='一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月',
months='一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月'  where name='簡體中文'
go
sp_configure 'allow update','0'
go
reconfigure with override
go

然後重起一下數據庫服務器。

然後運行
select convert(varchar(20),getdate(),107)
go

--------------------
九月 01, 2003


select convert(varchar(100),getdate(),9)
go
----------------------------------------------------------------------------------------------------
九月  1 2003 11:36:25:507AM

問題解決了。

看來,很多問題需要仔細的想一下,分析一下,看看文檔,自己手工實踐一下,都能迎刃而解。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章