天天看點

Sql Server中Convert用法

sql server使用convert來取得datetime日期資料,以下執行個體包含各種日期格式的轉換

語句及查詢結果:

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM

Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06

Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16

Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06

Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06

Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06

Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06

Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06

Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46

Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM

Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06

Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16

Select CONVERT(varchar(100), GETDATE(), 12): 060516

Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937

Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967

Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47

Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157

Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM

Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16

Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47

Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250

Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM

Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006

Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16

Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006

Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006

Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006

Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006

Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006

Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49

Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM

Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006

Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16

Select CONVERT(varchar(100), GETDATE(), 112): 20060516

Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513

Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547

Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49

Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700

Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827

Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM

Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM

說明:

使用 CONVERT:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

參數

expression

是任何有效的 Microsoft® SQL Server™ 表達式。。

data_type

目标系統所提供的資料類型,包括 bigint 和 sql_variant。不能使用使用者定義的資料類型。

length

nchar、nvarchar、char、varchar、binary 或 varbinary 資料類型的可選參數。

style

日期格式樣式,借以将 datetime 或 smalldatetime 資料轉換為字元資料(nchar、nvarchar、char、varchar、nchar 或 nvarchar 資料類型);或者字元串格式樣式,借以将 float、real、money 或 smallmoney 資料轉換為字元資料(nchar、nvarchar、char、varchar、nchar 或 nvarchar 資料類型)。

SQL Server 支援使用科威特算法的阿拉伯樣式中的資料格式。

在表中,左側的兩清單示将 datetime 或 smalldatetime 轉換為字元資料的 style 值。給 style 值加 100,可獲得包括世紀數位的四位年份 (yyyy)。

不帶世紀數位 (yy) 帶世紀數位 (yyyy)

标準

輸入/輸出**

- 0 或 100 (*) 預設值 mon dd yyyy hh:miAM(或 PM)

1 101 美國 mm/dd/yyyy

2 102 ANSI yy.mm.dd

3 103 英國/法國 dd/mm/yy

4 104 德國 dd.mm.yy

5 105 意大利 dd-mm-yy

6 106 - dd mon yy

7 107 - mon dd, yy

8 108 - hh:mm:ss

- 9 或 109 (*) 預設值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)

10 110 美國 mm-dd-yy

11 111 日本 yy/mm/dd

12 112 ISO yymmdd

- 13 或 113 (*) 歐洲預設值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)

14 114 - hh:mi:ss:mmm(24h)

- 20 或 120 (*) ODBC 規範 yyyy-mm-dd hh:mm:ss[.fff]

- 21 或 121 (*) ODBC 規範(帶毫秒) yyyy-mm-dd hh:mm:ss[.fff]

- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss.mmm(不含空格)

- 130* Hijri**** dd mon yyyy hh:mi:ss:mmmAM

- 131* Hijri**** dd/mm/yy hh:mi:ss:mmmAM

* 預設值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始終傳回世紀數位 (yyyy)。

** 當轉換為 datetime時輸入;當轉換為字元資料時輸出。

*** 專門用于 XML。對于從 datetime或 smalldatetime 到 character 資料的轉換,輸出格式如表中所示。對于從 float、money 或 smallmoney 到 character 資料的轉換,輸出等同于 style 2。對于從 real 到 character 資料的轉換,輸出等同于 style 1。

****Hijri 是具有幾種變化形式的月曆系統,Microsoft® SQL Server™ 2000 使用其中的科威特算法。

重要 預設情況下,SQL Server 根據截止年份 2049 解釋兩位數字的年份。即,兩位數字的年份 49 被解釋為 2049,而兩位數字的年份 50 被解釋為 1950。許多用戶端應用程式(例如那些基于 OLE 自動化對象的用戶端應用程式)都使用 2030 作為截止年份。SQL Server 提供一個配置選項("兩位數字的截止年份"),借以更改 SQL Server 所使用的截止年份并對日期進行一緻性處理。然而最安全的辦法是指定四位數字年份。

當從 smalldatetime 轉換為字元資料時,包含秒或毫秒的樣式将在這些位置上顯示零。當從 datetime 或 smalldatetime 值進行轉換時,可以通過使用适當的 char 或 varchar 資料類型長度來截斷不需要的日期部分 附:

如果SQL Server程式員想将表達式從一種換為另一種,他可以從SQL Server 7和2000中自帶的兩種功能中做出選擇。在存儲過程或其他情況下,我們常常需要将資料從datetime型轉化成varchar型;CONVERT和CAST就可以用于這種情況。

  由于SQL Server提供兩種功能,是以應該選擇哪種功能或應該在哪種情況下使用該功能就很容易讓人困惑了。CONVERT是專對SQL Server使用的,使日期與時間值,小數之間轉換具有更寬的靈活性。

  CAST是兩種功能中更具ANSI标準的功能,即雖然更具便攜性(比如,使用CAST的函數能更容易的被其它資料庫軟體使用),但功能相對弱一些。不過,當小數轉化為數值,并保留原始表達式中的小數數值時,仍然需要使用CAST。是以,我建議首先使用CAST,如果遇到必須使用CONVERT的情況時再使用CONVERT。

  CAST和CONVERT還能聯合使用,達到特殊的效果。比如,在current date下生成char變量一般使用以下方法:

  SELECT CONVERT(CHAR(10), CURRENT_TIMESTAMP, 102)

  (102表明使用了ANSI日期模式,即yy.mm.dd型)

  然而,如果你希望将這個變量明确生成為datetime或smalldatetime變量,以此在特定的資料庫欄中相容,那麼你可以使用以下語句:

  SELECT CAST(CONVERT(CHAR(10),CURRENT_TIMESTAMP,102) AS DATETIME

  傳回值将是 yy.mm.dd 00:00:00(如12:00AM作為時間戳;CURRENT_TIMESTAMP的時間資訊将被丢棄。)