SQL Server的日期輸入輸出格式設定

來源:互聯網
上載者:User

default language選項SQL Server定義了33種自然語言,每種語言確定了一種日期解釋方法,這些語言定義儲存在系統資料表syslanguages中,每種語言由一個語言識別項(ID)標識。
SQL Server執行個體的預設語言由系統選項default language確定,可以通過sp_configure修改:
EXEC sp_configure 'default language' , [langid]
langid是語言ID,對應系統資料表syslanguages的langid列。例如,下面的代碼把當前執行個體的預設語言設定為English(langid=0)
USE master
EXEC sp_configure 'default language',0
RECONFIGURE WITH OVERRIDE
每個SQL Server執行個體對所有與伺服器的串連都使用預設語言,但是每個串連也可以自行設定用於串連的SQL Server語言。
(1)  Microsoft ActiveX資料對象和OLE DB應用程式可以在串連時所指定的提供者字串中包括language關鍵字。對於OLE DB應用程式,也可以在串連之前,設定提供者專用屬性:SSPROP_INIT_CURRENTLANGUAGE。
(2)  開放式資料庫連接(ODBC)應用程式可以在SQLDriverConnect上所指定的連接字串中包括language關鍵字。ODBC應用程式還可以在SQL Server ODBC資料來源定義中指定語言設定。
(3)  DB-Library應用程式可以使用dblogin分配loginrec,然後在調用dbopen開啟串連之前使用DBSETNATLANG宏指定語言設定。
(4)  任何應用程式都可以使用SET LANGUAGE語句指定SQL Server語言
SET DATEFIRST
SET DATEFIRST設定一周的第一天是星期幾,該設定對所有使用者均有效,除非再次修改,否則該設定將一直保留。
SET DATEFIRST的具體文法如下:
SET DATEFIRST { number | @number_var }
其中參數number | @number_var是一個整數,表示一周的第一天。允許的值是1~7,1表示一周的第一天是星期一,7表示一周的第一天對應為星期日。number的預設值是7(即一周的第一天為星期日)。可以通過查詢系統變數@@DATEFIRST擷取當前的SET DATEFIRST設定值。
DATENAME(dw,date)及DATEPART(dw,date)的結果會受到SET DATEFIRST設定值的影響

SET DATEFORMAT
SET DATEFORMAT設定用於輸入datetime或smalldatetime資料的日期部分(月/日/年)的順序。僅用在將字串轉換為日期值時的解釋中,它對日期值的顯示沒有影響。
SET DATEFORMAT的具體文法如下:
SET DATEFORMAT { format | @format_var }
其中參數format | @format_var是日期部分的順序。有效參數包括mdy、dmy、ymd、ydm、myd 和 dym。
SET DATEFORMAT的設定是在執行或運行時設定,而不是在分析時設定。它僅作用於當前會話環境,當前會話環境關閉後自動失效。
SET DATEFORMAT設定中有幾個需要注意的地方。
(1)  SET DATEFORMAT設定對使用CONVERT把字元型日期轉換為日期的處理也具有影響,但不影響明確指定了style的CONVERT處理。
例如,在下面的樣本中,第一個CONVERT轉換未指定style,轉換的結果受SET DATAFORMAT的影響,第二個CONVERT轉換指定了style,轉換結果受style的影響。
--設定輸入日期順序為 日/月/年
SET DATEFORMAT DMY

--不指定Style參數的CONVERT轉換將受到SET DATEFORMAT的影響
SELECT CONVERT(datetime,'2-1-2005')
--結果: 2005-01-02 00:00:00.000

--指定Style參數的CONVERT轉換不受SET DATEFORMAT的影響
SELECT CONVERT(datetime,'2-1-2005',101)
--結果: 2005-02-01 00:00:00.000
(2)  如果輸入的日期包含了世紀部分,則對日期進行解釋處理時,年份的解釋不受SET DATEFORMAT設定的影響。
例如,在下面的代碼中,同樣的SET DATEFORMAT設定,輸入日期的世紀部分與不輸入日期的世紀部分,解釋的日期結果不同。
DECLARE @dt datetime

--設定SET DATEFORMAT為:月日年
SET DATEFORMAT MDY

--輸入的日期中指定世紀部分
SET @dt='01-2002-03'
SELECT @dt
--結果: 2002-01-03 00:00:00.000

--輸入的日期中不指定世紀部分
SET @dt='01-02-03'
SELECT @dt
--結果: 2003-01-02 00:00:00.000
(3)  如果輸入的日期不包含日期分隔符號,那麼SQL Server在對日期進行解釋時,將忽略SET DATEFORMAT的設定。
例如,在下面的代碼中,不包含日期分隔符號的字元日期,在不同的SET DATEFORMAT設定下,其解釋的結果是一樣的。
DECLARE @dt datetime

--設定SET DATEFORMAT為:月日年
SET DATEFORMAT MDY
SET @dt='010203'
SELECT @dt
--結果: 2001-02-03 00:00:00.000

--設定SET DATEFORMAT為:日月年
SET DATEFORMAT DMY
SET @dt='010203'
SELECT @dt
--結果: 2001-02-03 00:00:00.000

--輸入的日期中包含日期分隔符號
SET @dt='01-02-03'
SELECT @dt
--結果: 2003-02-01 00:00:00.000
SET LANGUAGE
SET LANGUAGE指定會話的語言環境。會話語言確定了datetime顯示格式和系統資訊。
SET LANGUAGE的具體文法如下:
SET LANGUAGE { [ N ] 'language' | @language_var }
其中參數[N]'language' | @language_var是儲存在系統資料表syslanguages中的語言名稱,表結構定義可以參考表2-5,語言名稱與syslanguages系統資料表的關係可以參考表2-6。該參數可以是UNICODE,或者是轉換為UNICODE的DBCS(雙位元組字元集)。若要指定使用UNICODE的語言,應使用N'language'。如果將語言指定為變數,則變數的資料類型必須為sysname。
SET LANGUAGE是在執行或運行時設定,而不是在分析時設定。它僅作用於當前會話環境,當前會話環境關閉後自動失效。
受SET LANGUAGE設定影響的日期處理函數是DATENAME和CONVERT,具體的影響如表2-6所示。
表2-6      SET LANGUAGE 、DATENAME、CONVERT與系統資料表syslanguages列的關係
列名
與SET LANGUAGE 、DATENAME、CONVERT的關係
name
SET LANGUAGE的language(語言名稱)的許可參數
alias
months
決定DATENAME (Month,date )的傳回值
shortmonths
影響CONVERT 將日期轉換字字元,Style={6,106,7,107,9,109,13,113,100}時,輸出的字串中的month部分的值
days
決定DATENAME (Weekday,date )的傳回值

以下樣本示範了在不同的語言環境下,DATENAME與CONVERT函數的不同結果。
USE master

--設定會話的語言環境為: English
SET LANGUAGE N'English'
SELECT
DATENAME(Month,GETDATE()) AS [Month],
DATENAME(Weekday,GETDATE()) AS [Weekday],
CONVERT(varchar,GETDATE(),109) AS [CONVERT]
/*--結果:
Month    Weekday   CONVERT
------------- -------------- -------------------------------
March    Tuesday   Mar 15 2005  8:59PM
--*/

--設定會話的語言環境為: 簡體中文
SET LANGUAGE N'簡體中文'
SELECT
DATENAME(Month,GETDATE()) AS [Month],
DATENAME(Weekday,GETDATE()) AS [Weekday],
CONVERT(varchar,GETDATE(),109) AS [CONVERT]
/*--結果
Month    Weekday    CONVERT
------------- --------------- -----------------------------------------
05       星期四     05 19 2005  2:49:20:607PM
--*/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.