sql cast函数用法教程

发布时间:2020-08-20编辑:脚本学堂
有关sql server中cast函数的用法,通过实例学习cast函数在数据类型转换中的应用,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、假定产品经理已经创建了一个系统,用于唯一地标识生产出来的每辆自行车,以便跟踪其型号、类型和类别。他决定合并产品号、产品生产线标识符、产品型号标识符和一个顺序号,为生产出来的每辆自行车创建一个唯一的序列号。在这个过程的第一步,他要求提供包括除顺序号之外的所有属性的所有可能产品的根标识符。
如果使用下面的表达式,就不能得到希望的结果。
 

1.select productnumber
2.+ '-'
    3.+ ProductLine
    4.+ '-'
    5.+ ProductModelID AS BikeSerialNum
    6.FROM Production.Product
    7.WHERE ProductSubCategoryID < 4
 

得到了有点奇怪的错误消息:请把nvarchar值转换为 int。

因为之前没有要求进行任何转换,所以这个错误很奇怪。
这个查询的问题在于试图利用第一个连接符来连接字符值ProductNumber,利用第二个连接符连接另一个字符值ProductLine,最后连接的是ProductModelID字符值(它是一个整数)。
查询引擎会把连接符当成一个数学运算符,而不是一个字符。
不管结果是什么,都需要更正这个表达式,以确保使用正确的数据类型。

以下表达式执行了必要的类型转换:
 

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

如果把整型值转换为字符类型就不会增加多余的空格了。
查询引擎将把这些值用加号和连接符组合在一起,进行字符串连接运算,而不是和前面的数值进行加法或者减法运算了。

以上通过实例详细介绍了sql server中cast函数的用法,希望对大家有所帮助。

更多有关cast函数的教程,请点这里