-----------------------------------------------------------------------------------------------
作者:翁彥
歡迎轉載,請保留此申明信息。
歡迎聯繫我,[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
問題解決了。
看來,很多問題需要仔細的想一下,分析一下,看看文檔,自己手工實踐一下,都能迎刃而解。