网站布局有哪些常见的,dedecms 模版网站,国内永久免费crm系统网站推荐有哪些,网站名称和备案公司名称不一样6.4 转换函数 数据类型转换可以通过CAST()和CONVERT()函数来实现。大多数情况下#xff0c;这两个函数是重叠的#xff0c;它们反映了SQL语言的演化历史。这两个函数的功能相似#xff0c;不过它们的语法不同。虽然并非所有类型的值都能转变为其他数据类型#xff0c;但总… 6.4 转换函数 数据类型转换可以通过CAST()和CONVERT()函数来实现。大多数情况下这两个函数是重叠的它们反映了SQL语言的演化历史。这两个函数的功能相似不过它们的语法不同。虽然并非所有类型的值都能转变为其他数据类型但总的来说任何可以转换的值都可以用简单的函数实现转换。 6.4.1 CAST()函数 CAST()函数的参数是一个表达式它包括用AS关键字分隔的源值和目标数据类型。以下例子用于将文本字符串123转换为整型: SELECT CAST(123 AS int) 返回值是整型值123。如果试图将一个代表小数的字符串转换为整型值又会出现什么情况呢 SELECT CAST(123.4 AS int) CAST()函数和CONVERT()函数都不能执行四舍五入或截断操作。由于123.4不能用int数据类型来表示所以对这个函数调用将产生一个错误: Server: Msg 245, Level 16, State 1, Line 1 Syntax error converting the varchar value 123.4 to a column of data type int. 要返回一个合法的数值就必须使用能处理这个值的数据类型。对于这个例子存在多个可用的数据类型。如果通过CAST()函数将这个值转换为decimal类型需要首先定义decimal值的精度与小数位数。在本例中精度与小数位数分别为9与2。精度是总的数字位数包括小数点左边和右边位数的总和。而小数位数是小数点右边的位数。这表示本例能够支持的最大的整数值是9999999而最小的小数是0.01。 SELECT CAST(123.4 AS decimal(9,2)) decimal数据类型在结果网格中将显示有效小数位: 123.40 精度和小数位数的默认值分别是18与0。如果在decimal类型中不提供这两个值SQL Server将截断数字的小数部分而不会产生错误。 SELECT CAST(123.4 AS decimal) 结果是一个整数值 123 在表的数据中转换数据类型是很简单的。下面的例子使用Product表首先执行如下查询 SELECT ProductNumber, ProductLine, ProductModelID FROM Production.Product WHERE ProductSubCategoryID 4 假定产品经理已经创建了一个系统用于唯一地标识生产出来的每辆自行车以便跟踪其型号、类型和类别。他决定合并产品号、产品生产线标识符、产品型号标识符和一个顺序号为生产出来的每辆自行车创建一个唯一的序列号。在这个过程的第一步他要求提供包括除顺序号之外的所有属性的所有可能产品的根标识符。 如果使用下面的表达式就不能得到希望的结果如图6-2所示。 SELECT ProductNumber - ProductLine - ProductModelID AS BikeSerialNum FROM Production.Product WHERE ProductSubCategoryID 4 点击查看大图图 6-2 我们没有得到希望的结果而得到了有点奇怪的错误消息请把nvarchar值转换为int。因为之前我们没有要求进行任何转换所以这个错误很奇怪。这个查询的问题在于我们试图利用第一个连接符来连接字符值ProductNumber利用第二个连接符连接另一个字符值ProductLine最后连接的是ProductModelID字符值(它是一个整数)。 查询引擎会把连接符当成一个数学运算符而不是一个字符。不管结果是什么都需要更正这个表达式以确保使用正确的数据类型。以下表达式执行了必要的类型转换返回如图6-3所示的结果 SELECT ProductNumber - ProductLine - CAST(ProductModelID AS char(4)) AS BikeSerialNum FROM Production.Product WHERE ProductSubCategoryID 4 如果把整型值转换为字符类型就不会增加多余的空格了。查询引擎将把这些值用加号和连接符组合在一起进行字符串连接运算而不是和前面的数值进行加法或者减法运算了。 图 6-3