1. 程式人生 > >SQL轉換函式(CAST 和 CONVERT)

SQL轉換函式(CAST 和 CONVERT)

               

如果 SQL Server 2005 沒有自動執行資料型別的轉換,可以使用 CAST 和 CONVERT 轉換函式將一種資料型別的表示式轉換為另一種資料型別的表示式。例如,如果比較 char 和 datetime 表示式、smallint 和 int 表示式或不同長度的 char 表示式,則 SQL Server 自動對這些表示式進行轉換。這種轉換稱為隱式轉換。不必使用 CAST 或 CONVERT 來進行這些隱式轉換。但可以在下列轉換方案中使用 CAST 和 CONVERT:

  • 兩個表示式的資料型別完全相同。
  • 兩個表示式可以隱式轉換。
  • 需要隱式轉換資料型別。

如果嘗試進行不可能的轉換(例如,將包括字母的 char 表示式轉換為 int),SQL Server 將顯示錯誤訊息。

此外,CAST 函式和 CONVERT 函式還可用於獲取各種特殊資料格式,並可用於選擇列表、WHERE 子句以及允許使用表示式的任何位置中。

如果希望 Transact-SQL 程式程式碼符合 SQL-92,請使用 CAST 而不要使用 CONVERT。如果要利用 CONVERT 中的功能,請使用 CONVERT 而不要使用 CAST。

使用 CAST 或 CONVERT 時,需要提供以下資訊:

  • 要轉換的表示式;例如,銷售報表要求銷售資料從貨幣資料轉換為字元資料。
  • 要將指定的表示式轉換為的資料型別,例如 varchar 或其他 SQL Server 系統資料型別。

除非將被轉換的值儲存起來,否則轉換僅在 CAST 函式或 CONVERT 函式的作用時間範圍內有效。

如果轉換時沒有指定資料型別的長度,則 SQL Server 自動將 30 作為長度值。

示例

下列示例中,第一個 SELECT 語句使用 CONVERT、第二個 SELECT 語句使用 CAST 來將 Title 列轉換為 nvarchar(20) 列以縮短標題的長度。

USE AdventureWorks; GO SELECT CAST(Title AS nvarchar(20)) AS Title, Revision FROM Production.Document WHERE Revision < 2 GO

USE AdventureWorks; GO SELECT CONVERT(nvarchar(20
), Title) AS Title, Revision FROM Production.Document WHERE Revision < 2 GO

下面是這兩者查詢的結果集。

1.擷取datetime型別的日期,不需要小時分鐘等等:

select convert(char(10), getdate(),120

結果為:

2010-08-09

2.擷取datetime型別的具體時間,不需要日期:

select convert(char(8), getdate(),108

結果為:

00:35:36 擴充套件資料:1.CAST 和 CONVERT (Transact-SQL) http://technet.microsoft.com/zh-cn/library/ms187928%28SQL.90%29.aspx2.CAST 和 CONVERT轉換函式(MSDN參考) http://wenku.baidu.com/view/3c6f15fe04a1b0717fd5dd81.html