CAST()函数

Wesley13
• 阅读 532

6.4 转换函数

数据类型转换可以通过CAST()和CONVERT()函数来实现。大多数情况下,这两个函数是重叠的,它们反映了SQL语言的演化历史。这两个函数的功能相似,不过它们的语法不同。虽然并非所有类型的值都能转变为其他数据类型,但总的来说,任何可以转换的值都可以用简单的函数实现转换。

6.4.1 CAST()函数

CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。以下例子用于将文本字符串'123'转换为整型:

  1. SELECT CAST('123' AS int)

 

返回值是整型值123。如果试图将一个代表小数的字符串转换为整型值,又会出现什么情况呢?

  1. SELECT CAST('123.4' AS int)

  

CAST()函数和CONVERT()函数都不能执行四舍五入或截断操作。由于123.4不能用int数据类型来表示,所以对这个函数调用将产生一个错误:

  1. Server: Msg 245, Level 16, State 1, Line 1  
  2. Syntax error converting the varchar value
    '123.4' to a column of data type int.

 

要返回一个合法的数值,就必须使用能处理这个值的数据类型。对于这个例子,存在多个可用的数据类型。如果通过CAST()函数将这个值转换为decimal类型,需要首先定义decimal值的精度与小数位数。在本例中,精度与小数位数分别为9与2。精度是总的数字位数,包括小数点左边和右边位数的总和。而小数位数是小数点右边的位数。这表示本例能够支持的最大的整数值是9999999,而最小的小数是0.01。

  1. SELECT CAST('123.4' AS decimal(9,2))

 

decimal数据类型在结果网格中将显示有效小数位:

  1. 123.40

 

精度和小数位数的默认值分别是18与0。如果在decimal类型中不提供这两个值,SQL Server将截断数字的小数部分,而不会产生错误。

  1. SELECT CAST('123.4' AS decimal)

 

结果是一个整数值:

  1. 123

 

在表的数据中转换数据类型是很简单的。下面的例子使用Product表,首先执行如下查询:

  1. SELECT ProductNumber, ProductLine, ProductModelID  
  2. FROM Production.Product  
  3. WHERE ProductSubCategoryID < 4

 

假定产品经理已经创建了一个系统,用于唯一地标识生产出来的每辆自行车,以便跟踪其型号、类型和类别。他决定合并产品号、产品生产线标识符、产品型号标识符和一个顺序号,为生产出来的每辆自行车创建一个唯一的序列号。在这个过程的第一步,他要求提供包括除顺序号之外的所有属性的所有可能产品的根标识符。

如果使用下面的表达式,就不能得到希望的结果,如图6-2所示。

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

 

CAST()函数  

(点击查看大图)图 6-2

我们没有得到希望的结果,而得到了有点奇怪的错误消息:请把nvarchar值转换为int。因为之前我们没有要求进行任何转换,所以这个错误很奇怪。这个查询的问题在于我们试图利用第一个连接符来连接字符值ProductNumber,利用第二个连接符连接另一个字符值ProductLine,最后连接的是ProductModelID字符值(它是一个整数)。

查询引擎会把连接符当成一个数学运算符,而不是一个字符。不管结果是什么,都需要更正这个表达式,以确保使用正确的数据类型。以下表达式执行了必要的类型转换,返回如图6-3所示的结果:

  1. SELECT ProductNumber  
  2.        + '-'  
  3.        + ProductLine  
  4.        + '-'  
  5.        + CAST(ProductModelID AS char(4)) AS BikeSerialNum  
  6. FROM Production.Product  
  7. WHERE ProductSubCategoryID < 4

 

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

CAST()函数  

图 6-3

点赞
收藏
评论区
推荐文章
CuterCorley CuterCorley
3年前
Python SQLite常见异常及解决办法
1.sqlite获取某一列数值中的最大值一直返回9问题及解决办法sqlite获取最大值一般使用max函数来获取,但是返回值一直是9。原因是因为该列字段值类型不是数值类型。可以通过cast来改变字段值类型,使用以下语句解决:pythonselectmax(cast(列名asint))from表名2.sqlite3.Opera
happlyfox happlyfox
3年前
go好用的类型转换第三方组件
关于我通过学习和分享的过程,将自己工作中的问题和技术总结输出,希望菜鸟和老鸟都能通过自己的文章收获新的知识,并付诸实施。Cast介绍Cast是什么?Cast是一个库,以一致和简单的方式在不同的go类型之间转换。Cast提供了简单的函数,可以轻松地将数字转换为字符串,将接口转换为bool类型等等。当一个明显的转换是可能的时,Cast会智
happlyfox happlyfox
2年前
go好用的类型转换第三方组件 [cast]
关于我Cast介绍Cast是什么?Cast是一个库,以一致和简单的方式在不同的go类型之间转换。Cast提供了简单的函数,可以轻松地将数字转换为字符串,将接口转换为bool类型等等。当一个明显的转换是可能的时,Cast会智能地执行这一操作。它不会试图猜测你的意思,例如,你只能将一个字符串转换为int的字符串表示形式,例如“8”。Cast是为Hugo开发的
Wesley13 Wesley13
2年前
C++ 4种强制类型转换
C的四种强制类型转换为:static\_cast、const\_cast、reinterpret\_cast和dynamic\_cast类型转换的一般形式:castname(expression);static\_cast任何具有明确定义的类型转换,只要不包含底层const,都可以使用static\_cast;doub
Stella981 Stella981
2年前
Python标准库笔记(8) — pprint模块
struct模块提供了用于在字节字符串和Python原生数据类型之间转换函数,比如数字和字符串。  该模块作用是完成Python数值和C语言结构体的Python字符串形式间的转换。这可以用于处理存储在文件中或从网络连接中存储的二进制数据,以及其他数据源。1\.模块函数和Struct类  它除了提供一个Struct类之外,还
Wesley13 Wesley13
2年前
CAST()函数可以进行数据类型的转换。
CAST()函数可以进行数据类型的转换。CAST()函数的参数有两部分,源值和目标数据类型,中间用AS关键字分隔。以下例子均通过本人测试。一、转换列或值语法:cast(列名/值as数据类型)用例:1)、转换列\将empno的类型(number)转换为varchar2类型。selectcast(empnoasv
Easter79 Easter79
2年前
SQL中的cast()函数
CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。一、语法:  CAST(expressionASdata\_type)  参数说明:  expression:任何有效的SQServer表达式。  AS
Stella981 Stella981
2年前
SQL中的cast()函数
CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。一、语法:  CAST(expressionASdata\_type)  参数说明:  expression:任何有效的SQServer表达式。  AS
Wesley13 Wesley13
2年前
C++面试
C/C基础dynamic\_cast和static\_cast区别,为什么dynamic\_cast能做到类型检查new和malloc区别,new实际上执行了什么操作,可能在什么步骤出现异常虚继承的细节,纯虚函数智能指针的作用和实现,auto\_ptr和share\_ptr区别,循环引用,weak
Wesley13 Wesley13
2年前
C++重载双目运算符(2)(对象与数之间)
有两种方法:(1)采用重载双目运算符方式(2)1.类型转换函数(将类的对象转换为其他数据类型)2.转换构造函数(将其他类型转换为类的对象)(仍然要配合重载双目运算符的方式,因为最终实现的是类的两个对象相加)(注意:类型转换函数和转换构造函数不可同时使用,会出现二