sql CAST用法


(1).CAST()函數的參數是一個表達式,它包括用AS關鍵字分隔的源值和目標數據類型。以下例子用於將文本字符串'12'轉換為整型:

 

 

SELECT CAST('12' AS int)

 

 

(2).返回值是整型值12。如果試圖將一個代表小數的字符串轉換為整型值,又會出現什么情況呢?

 

SELECT CAST('12.5' AS int)  

 

 

(3).CAST()函數和CONVERT()函數都不能執行四舍五入或截斷操作。由於12.5不能用int數據類型來表示,所以對這個函數調用將產生一個錯誤:

 

Server: Msg 245, Level 16, State 1, Line 1

Syntax error converting the varchar value

    '12.5' to a column of data type int.

 


 

(4).要返回一個合法的數值,就必須使用能處理這個值的數據類型。對於這個例子,存在多個可用的數據類型。如果通過CAST()函數將這個值轉換為decimal類型,需要首先定義decimal值的精度與小數位數。在本例中,精度與小數位數分別為9 與2。精度是總的數字位數,包括小數點左邊和右邊位數的總和。而小數位數是小數點右邊的位數。這表示本例能夠支持的最大的整數值是9999999,而最小的小數是0.01。

 

SELECT CAST('12.5' AS decimal(9,2))

 

decimal數據類型在結果網格中將顯示有效小數位: 12.50

 

(5).精度和小數位數的默認值分別是18與0。如果在decimal類型中不提供這兩個值,SQL Server將截斷數字的小數部分,而不會產生錯誤。

 

SELECT CAST('12.5' AS decimal)

 

    結果是一個整數值:12

 

(6).在表的數據中轉換數據類型是很簡單的。下面的例子使用Product表,首先執行如下查詢:

 

SELECT ProductNumber, ProductLine, ProductModelID

FROM Production.Product

    ProductSubCategoryID < 4

 


 

(7).假定產品經理已經創建了一個系統,用於唯一地標識生產出來的每輛自行車,以便跟蹤其型號、類型和類別。他決定合並產品號、產品生產線標識符、產品型號標識符和一個順序號,為生產出來的每輛自行車創建一個唯一的序列號。在這個過程的第一步,他要求提供包括除順序號之外的所有屬性的所有可能產品的根標識符。

如果使用下面的表達式,就不能得到希望的結果,如圖6-2所示。

SELECT ProductNumber

+ '-'

+ ProductLine

+ '-'

+ ProductModelID AS BikeSerialNum

FROM Production.Product

WHERE ProductSubCategoryID < 4

 


 

我們沒有得到希望的結果,而得到了有點奇怪的錯誤消息:請把nvarchar值轉換為 int。因為之前我們沒有要求進行任何轉換,所以這個錯誤很奇怪。這個查詢的問題在於我們試圖利用第一個連接符來連接字符值ProductNumber,利用第二個連接符連接另一個字符值ProductLine,最后連接的是ProductModelID字符值(它是一個整數)。

查詢引擎會把連接符當成一個數學運算符,而不是一個字符。不管結果是什么,都需要更正這個表達式,以確保使用正確的數據類型。以下表達式執行了必要的類型轉換,返回如圖6-3所示的結果:

 

    SELECT ProductNumber
            + '-'
            + ProductLine
            + '-'
            + CAST(ProductModelID AS char(4)) AS BikeSerialNum
    FROM Production.Product
    WHERE ProductSubCategoryID < 4

 

 

如果把整型值轉換為字符類型就不會增加多余的空格了。查詢引擎將把這些值用加號和連接符組合在一起,進行字符串連接運算,而不是和前面的數值進行加法或者減法運算了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM