语法
|
Syntax for CAST:
CAST ( expression AS data_type [ (length ) ])
Syntax for CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
|
隐式转换指那些没有指定 CAST 或 CONVERT 函数的转换。显式转换指那些需要指定 CAST 或 CONVERT 函数的转换。以下图例显示了可对 SQL Server 2005 系统提供的数据类型执行的所有显式和隐式数据类型转换。其中包括 xml、bigint 和 sql_variant。不存在对 sql_variant 数据类型的赋值进行的隐式转换,但是存在转换为 sql_variant 的隐式转换。
A. 同时使用 CAST 和 CONVERT
每个示例都检索列表价格的第一位是 3
的产品的名称,并将 ListPrice
转换为 int
。
| |
-- Use CAST
USE AdventureWorks;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CAST(ListPrice AS int) LIKE '3%';
GO
-- Use CONVERT.
USE AdventureWorks;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CONVERT(int, ListPrice) LIKE '3%';
GO
|
B. 使用包含算术运算符的 CAST
以下示例将本年度截止到现在的全部销售额 (SalesYTD
) 除以佣金百分比 (CommissionPCT
),从而得出单列计算结果 (Computed
)。在舍入到最接近的整数后,将此结果转换为 int
数据类型。
| |
USE AdventureWorks;
GO
SELECT CAST(ROUND(SalesYTD/CommissionPCT, 0) AS int) AS 'Computed'
FROM Sales.SalesPerson
WHERE CommissionPCT != 0;
GO
|
下面是结果集:
| |
Computed
------
379753754
346698349
257144242
176493899
281101272
0
301872549
212623750
298948202
250784119
239246890
101664220
124511336
97688107
(14 row(s) affected)
|
C. 使用 CAST 进行连接
以下示例使用 CAST
连接非字符型非二进制表达式。
| |
USE AdventureWorks;
GO
SELECT 'The list price is ' + CAST(ListPrice AS varchar(12)) AS ListPrice
FROM Production.Product
WHERE ListPrice BETWEEN 350.00 AND 400.00;
GO
|
下面是结果集:
| |
ListPrice
------------------
The list price is 357.06
The list price is 364.09
The list price is 364.09
The list price is 364.09
The list price is 364.09
(5 row(s) affected)
|
D. 使用 CAST 生成可读性更高的文本
以下示例使用选择列表中的 CAST
将 Name
列转换为 char(10)
列。
| |
USE AdventureWorks;
GO
SELECT DISTINCT CAST(p.Name AS char(10)) AS Name, s.UnitPrice
FROM Sales.SalesOrderDetail s JOIN Production.Product p on s.ProductID = p.ProductID
WHERE Name LIKE 'Long-Sleeve Logo Jersey, M';
GO
|
下面是结果集:
| |
Name UnitPrice
---------- ---------------------
Long-Sleev 31.2437
Long-Sleev 32.4935
Long-Sleev 49.99
(3 row(s) affected)
|
E. 使用包含 LIKE 子句的 CAST
以下示例将 money 列 SalesYTD
转换为 int
,然后再转换为 char(20)
列,以便可以对其使用 LIKE
子句。
| |
USE AdventureWorks;
GO
SELECT p.FirstName, p.LastName, s.SalesYTD, s.SalesPersonID
FROM Person.Contact p JOIN Sales.SalesPerson s ON p.ContactID = s.SalesPersonID
WHERE CAST(CAST(s.SalesYTD AS int) AS char(20)) LIKE '2%';
GO
|
下面是结果集:
| |
FirstName LastName SalesYTD SalesPersonID
---------------- ------------------- ---------------- -------------
Carol Elliott 2811012.7151 279
Julie Estes 219088.8836 288
Janeth Esteves 2241204.0424 289
(3 row(s) affected)
|
F. 使用包含类型化的 XML 的 CONVERT 或 CAST
下面的几个示例显示如何通过xml 数据类型使用 CONVERT 转换为类型化的 XML。
此示例将包含空格、文本和标记的字符串转换为类型化的 XML,并删除所有无用空格(节点之间的边界空格):
| |
CONVERT(XML, '<root><child/></root>')
|
此示例将包含空格、文本和标记的类似字符串转换为类型化的 XML,并保留无用空格(节点之间的边界空格):
| |
CONVERT(XML, '<root> <child/> </root>', 1)
|
此示例将包含空格、文本和标记的字符串转换为类型化的 XML:
| |
CAST('<Name><FName>Carol</FName><LName>Elliot</LName></Name>' as XML)
|