10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

MySQL 8.0参考手册/函数和运算符/强制转换函数和操作符

12.11强制转换函数和操作符

表12.15强制转换函数和操作符

的名字 描述
二进制 将字符串转换为二进制字符串
把() 将值转换为特定类型
将() 将值转换为特定类型

强制转换函数和操作符支持将值从一种数据类型转换为另一种数据类型。

将()与一个使用子句在字符集之间转换数据:

转换(expr使用transcoding_name

在MySQL中,转码名称与相应的字符集名称相同。

例子:

SELECT CONVERT('test' USING utf8mb4);SELECT CONVERT(_latin1'Müller' USING utf8mb4);INSERT INTO utf8mb4_table (utf8mb4_column) SELECT FROM latin1_column USING utf8mb4;

要在字符集之间转换字符串,还可以使用转换(expr类型语法(不使用),或演员(expr作为类型,相当于:

转换(字符串CHAR [(N)字符集charset_name)把(字符串CHAR [(N)字符集charset_name

例子:

SELECT CONVERT('test', CHAR CHARACTER SET utf8mb4);SELECT ('test' AS CHAR CHARACTER SET utf8mb4);

如果您指定字符集charset_name如刚才所示,结果的字符集和排序为charset_name的默认排序规则charset_name.如果您省略字符集charset_name,结果的字符集和排序规则由character_set_connection而且collation_connection确定默认连接字符集和排序规则的系统变量(参见第10.4节“连接字符集和排序规则”).

一个核对条款是不允许的将()把()调用,但您可以将其应用于函数结果。例如,这些是合法的:

SELECT ('test' USING utf8mb4) COLLATE utf8mb4_bin;SELECT CONVERT('test', CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_bin;SELECT ('test' AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_bin;

但这些都是非法的:

SELECT CONVERT('test' USING utf8mb4 COLLATE utf8mb4_bin);SELECT CONVERT('test', CHAR CHARACTER SET utf8mb4 COLLATE utf8mb4_bin);SELECT CAST('test' AS CHAR CHARACTER SET utf8mb4 COLLATE utf8mb4_bin);

通常情况下,你不能比较值或其他二进制字符串不区分大小写,因为二进制字符串使用二进制字符集,它与字母的概念没有排序关系。要执行不区分大小写的比较,首先使用将()把()函数将值转换为非二进制字符串。对结果字符串的比较使用其排序规则。例如,如果转换结果排序规则不区分大小写,则a就像操作不区分大小写。对于下面的操作,这是正确的,因为默认的utf8mb4排序(utf8mb4_0900_ai_ci)不区分大小写:

选择' a ' like convert (blob_col使用utf8mb4)tbl_name

若要为转换后的字符串指定特定的排序规则,请使用核对条款后,将()电话:

选择' a ' like convert (blob_col使用utf8mb4) COLLATE utf8mb4_unicode_ci FROMtbl_name

若要使用不同的字符集,请将其名称替换为utf8mb4在前面的语句中(类似地使用不同的排序规则)。

将()而且把()可以更广泛地用于比较以不同字符集表示的字符串。例如,比较这些字符串会导致错误,因为它们具有不同的字符集:

mysql> SET @s1 = _latin1 'abc', @s2 = _latin2 'abc';mysql> SELECT @s1 = @s2;错误1267 (HY000):非法混合排序规则(latin1_swedish_ci,IMPLICIT)和(latin2_general_ci,IMPLICIT)用于操作'='

将其中一个字符串转换为与另一个字符串兼容的字符集可以使比较没有错误:

SELECT @s1 = CONVERT(@s2 USING latin1);+---------------------------------+ | @ s1 =转换(@s2使用latin1。中的一个 ) | +---------------------------------+ | 1  | +---------------------------------+

对于字符串字面量,指定字符集的另一种方法是使用字符集引入器。_latin1而且_latin2在上面的例子中是介绍器的实例。不像转换函数,如把(),或将(),它将字符串从一个字符集转换为另一个字符集,引入器将字符串字面量指定为具有特定字符集,而不涉及转换。有关更多信息,请参见第10.3.8节“字符集介绍器”

字符集转换在二进制字符串的大小写转换之前也很有用。低()而且上()在直接应用于二进制字符串时无效,因为不适用字母大小写的概念。要执行二进制字符串的大小写转换,首先使用与存储在字符串中的数据相适应的字符集将其转换为非二进制字符串:

mysql> SET @str = BINARY 'New York';mysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING utf8mb4));+-------------+------------------------------------+ | 低(@str) |(转换(使用utf8mb4 @str )) | +-------------+------------------------------------+ | 纽约|纽约  | +-------------+------------------------------------+

请注意,如果使用二进制把(),或将(), MySQL可能无法有效地使用索引。

类型中创建具有特定类型的列时,强制转换函数非常有用创建表……选择声明:

mysql> CREATE TABLE new_table SELECT ('2000-01-01' AS DATE) AS c1mysql >显示创建表new_table \ G  *************************** 1。row *************************** Table: new_table Create Table: Create Table ' new_table ' (' c1 ' date DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

强制转换函数对于排序很有用枚举按词汇顺序排列的列。通常,排序的枚举列使用内部数值发生。将值转换为字符词法排序的结果:

选择enum_coltbl_nameORDER BY演员(enum_col字符);

把()如果将结果用作更复杂的表达式的一部分,例如CONCAT('Date: ',CAST(NOW()为日期))

对于时间值,几乎不需要使用把()提取不同格式的数据。相反,应该使用这样的函数提取()DATE_FORMAT (),或TIME_FORMAT ().看到第12.7节“日期和时间函数”

要将字符串转换为数字,在数值上下文中使用字符串值通常就足够了:

mysql >选择1 + 1;- > 2

这对于十六进制和位字面量也是正确的,它们默认是二进制字符串:

SELECT X'41', X'41'+0;SELECT b'1100001', b'1100001'+0;- > ' a ', 97

在表达式求值期间,用于算术运算的字符串将转换为浮点数。

字符串上下文中使用的数字被转换为字符串:

mysql> SELECT ('hello you ',2);-> '你好2'

有关数字到字符串的隐式转换的信息,请参见第12.3节“表达式求值中的类型转换”

MySQL支持有符号和无符号64位值的算术。对于数字操作符(如+-),其中一个操作数是无符号整数,默认情况下结果是无符号的(参见第12.6.1节“算术运算符”).要重写此设置,请使用签署无符号强制转换运算符,将值分别强制转换为有符号或无符号64位整数。

mysql> SELECT 1 - 2;SELECT CAST(1 - 2 AS UNSIGNED);-> 18446744073709551615 mysql> SELECT CAST(CAST(1 - 2 AS UNSIGNED) AS SIGNED);- > 1

如果其中一个操作数是浮点值,则结果为浮点值,不受上述规则的影响。(在这种情况下,小数列值被视为浮点值。)

mysql> SELECT CAST(1 AS UNSIGNED) - 2.0;- > -1.0

SQL模式会影响转换操作的结果(参见第5.1.11节,“Server SQL模式”).例子:

  • 的转换日期字符串到日期,将()而且把()返回并产生一个警告NO_ZERO_DATE启用SQL模式。

  • 对于整数减法,如果NO_UNSIGNED_SUBTRACTION如果启用SQL模式,则即使任何操作数是无符号的,减法结果也是有符号的。

下面的列表描述了可用的强制转换函数和操作符:

  • 二进制expr

    二进制操作符将表达式转换为二进制字符串(具有二进制字符集和二进制排序)。的常用用法二进制是强制使用数值字节值逐字节进行字符串比较,而不是逐个字符进行比较。的二进制运算符还会导致比较中的尾随空格非常重要。的差异的信息二进制排序的二进制字符集和_bin非二进制字符集的排序,请参见第10.8.5节“binary Collation compare to _bin Collations”

    mysql> SELECT 'a' = 'a';SELECT BINARY 'a' = 'a';SELECT 'a' = 'a';SELECT BINARY 'a' = 'a';- > 0

    在一个比较,二进制影响整个操作;它可以在任意一个操作数之前给出,结果相同。

    要将字符串表达式转换为二进制字符串,这些构造是等价的:

    演员(expr作为二进制)转换(expr使用二进制)二进制expr

    方法将值指定为二进制字符串,而无需对其进行转换_binary字符集介绍人:

    mysql> SELECT 'a' = 'a';SELECT _binary 'a' = 'a';- > 0

    有关介绍人的信息,请参见第10.3.8节“字符集介绍器”

    二进制运算符在表达式中的效果不同于二进制属性中的字符列定义。方法定义的字符列二进制属性,MySQL为表分配默认字符集和二进制(_bin)该字符集的排序。每个非二进制字符集都有一个_bin排序。例如,如果表的默认字符集是utf8mb4,这两个列定义是等价的:

    CHAR(10) BINARY CHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

    的使用字符集二进制在a的定义中字符VARCHAR,或文本列导致将列视为相应的二进制字符串数据类型。例如,以下两组定义是等价的:

    vararchar(10)字符集二进制VARBINARY(10)文本字符集二进制BLOB

    如果二进制mysql的值,二进制字符串使用十六进制表示法显示——binary-as-hex.有关该选项的更多信息,请参见第4.5.1节,mysql命令行客户端

  • 演员(expr作为类型(数组))

    演员(timestamp_value在的时区timezone_specifierDATETIME ((精度)))

    timezone_specifier: [interval] '+00:00' | ' utc '

    把()函数接受任意类型的表达式并生成指定类型的结果值,类似于将().有关更多信息,请参见将()

    在MySQL 8.0.17及更高版本中,InnoDB允许使用附加项数组对象上创建多值索引的关键字JSON数组作为创建索引创建表,ALTER TABLE语句。数组不支持,除非用于在这些语句之一中创建多值索引,在这种情况下需要使用它。被索引的列必须是类型的列JSON.与数组,类型后,作为关键字可以指定控件支持的任何类型把()的例外二进制JSON,一年.有关语法信息和示例以及其他相关信息,请参见多值的索引

    请注意

    不像把()将()支持多值索引创建或数组关键字。

    从MySQL 8.0.22开始,把()支持检索时间戳值为UTC格式,使用在时区操作符。唯一支持的时区是UTC;这可以指定为其中之一“+ 00:00”UTC的.此语法支持的惟一返回类型是DATETIME,具有一个可选的精度说明符,范围为0到6,包括。

    时间戳还支持使用时区偏移的值。

    mysql >选择@@system_time_zone;+--------------------+ | @@ system_time_zone  | +--------------------+ | 美国东部时间  | +--------------------+ 1行组(0.00秒)mysql >创建表TZ (c时间戳);查询OK, 0 rows affected (0.41 sec) mysql> INSERT INTO tz VALUES > ROW(CURRENT_TIMESTAMP), > ROW('2020-07-28 14:50:15+1:00');查询OK, 1 row affected (0.08 sec) mysql> TABLE tz;+---------------------+ | c  | +---------------------+ | 2020-07-28 09:22:41 | | 2020-07-28 09:50:15  | +---------------------+ 2行(0.00秒)mysql >选择投在时区(c + 00:00的DATETIME)从tz u;+---------------------+ | u  | +---------------------+ | 2020-07-28 13:22:41 | | 2020-07-28 13:50:15  | +---------------------+ 2行(0.00秒)mysql >选择演员(c时区的UTC日期时间(2))从tz u;+------------------------+ | u  | +------------------------+ | 2020-07-28 13:22:41.00 | | 2020-07-28 13:50:15.00  | +------------------------+ 2行集(0.00秒)

    如果你使用UTC的的形式作为时区说明符把(),服务器会抛出一个错误,例如未知或不正确的时区:'UTC',您可能需要安装MySQL时区表(参见填充时区表).

    在的时区不支持数组关键字,且不支持将()函数。

  • 转换(expr使用transcoding_name转换(expr类型

    将()函数接受任意类型的表达式,并生成指定类型的结果值。

    转换(…使用…)是标准的SQL语法。非-使用形式的将()ODBC是语法。

    转换(expr使用transcoding_name在不同的字符集之间转换数据。在MySQL中,转码名称与相应的字符集名称相同。例如,该语句转换字符串“abc”的默认字符集中的对应字符串utf8mb4字符集:

    SELECT CONVERT('abc' USING utf8mb4);

    转换(expr类型语法(不使用)取一个表达式和一个类型值,指定结果类型。该操作也可以表示为演员(expr作为类型,两者是等价的。这些类型值是允许的:

    • 二进制((N)]

      方法生成一个字符串二进制数据类型。有关这如何影响比较的描述,请参见第11.3.3节“BINARY和VARBINARY类型”.如果可选长度N是给定的,二进制(N导致强制转换使用不超过N参数的字节数。值小于N字节用0 x00长度为的字节N

    • CHAR [(N)] [charset_info

      方法生成一个字符串字符数据类型。如果可选长度N是给定的,CHAR (N导致强制转换使用不超过N论点的特征。对于小于的值没有填充N字符。

      没有charset_info条款,字符生成具有默认字符集的字符串。要显式指定字符集,可以使用以下命令charset_info值是允许的:

      • 字符集charset_name:生成具有给定字符集的字符串。

      • 美国信息交换标准代码:缩写字符集latin1

      • UNICODE:缩写字符集ucs2

      在所有情况下,字符串都具有字符集默认排序规则。

    • 日期

      产生一个日期价值。

    • DATETIME

      产生一个DATETIME价值。

    • 十进制(([,D)))

      产生一个小数价值。如果可选而且D给定值,它们指定了最大位数(精度)和小数点后的位数(刻度)。

    • 产生一个结果。在MySQL 8.0.17中新增。

    • 浮动((p)]

      如果精度p,生成类型为?的结果浮动.如果p且0 <= <p<= 24,结果为类型浮动.如果25 < =p<= 53,结果为类型.如果p< 0或p> 53,返回错误。在MySQL 8.0.17中新增。

    • JSON

      产生一个JSON价值。之间的值转换规则的详细信息JSON还有其他类型的,看JSON值的比较和排序

    • NCHAR [(N)]

      就像字符,但生成具有国家字符集的字符串。看到第10.3.7节“国家字符集”

      不像字符NCHAR不允许指定尾随字符集信息。

    • 真正的

      生成类型的结果真正的.这实际上是浮动如果REAL_AS_FLOAT启用SQL模式;否则,结果为类型

    • 签署(整数)

      产生有符号整数值。

    • spatial_type

      从MySQL 8.0.24开始,把()而且将()对于空间类型的某些组合,支持将几何值从一种空间类型转换为另一种空间类型。下面的列表显示了允许的类型组合,其中MySQL扩展指定在MySQL中实现的类型转换SQL /毫米标准

      • :

        • 多点

        • GeometryCollection

      • LineString:

        • 多边形(MySQL扩展)

        • 多点(MySQL扩展)

        • MultiLineString

        • GeometryCollection

      • 多边形:

        • LineString(MySQL扩展)

        • MultiLineString(MySQL扩展)

        • 多个多边形

        • GeometryCollection

      • 多点:

        • LineString(MySQL扩展)

        • GeometryCollection

      • MultiLineString:

        • LineString

        • 多边形(MySQL扩展)

        • 多个多边形(MySQL扩展)

        • GeometryCollection

      • 多个多边形:

        • 多边形

        • MultiLineString(MySQL扩展)

        • GeometryCollection

      • GeometryCollection:

        • LineString

        • 多边形

        • 多点

        • MultiLineString

        • 多个多边形

      在空间数据类型转换,GeometryCollection而且GeomCollection是相同结果类型的同义词。

      有些条件适用于所有空间类型强制转换,有些条件仅适用于强制转换结果具有特定的空间类型。有关术语的信息,如格式良好的几何,看到第11.4.4节“几何格式良好性和有效性”

      空间铸造的一般条件

      这些条件适用于所有空间类型转换,而不管结果类型是什么:

      • 强制转换的结果与要强制转换的表达式的结果在相同的SRS中。

      • 空间类型之间的类型转换不会改变坐标值或顺序。

      • 如果要强制转换的表达式是,函数结果为

      • 类型转换为空间类型JSON_VALUE ()函数与一个返回子句指定空间类型是不允许的。

      • 铸造一个数组的空间类型不允许。

      • 如果允许空间类型组合,但要强制转换的表达式不是语法上格式良好的几何图形,则ER_GIS_INVALID_DATA发生错误。

      • 如果允许空间类型组合,但要强制转换的表达式是未定义空间参考系统(SRS)中语法形式良好的几何图形,则ER_SRS_NOT_FOUND发生错误。

      • 如果要强制转换的表达式具有地理SRS,但具有超出范围的经度或纬度,则会发生错误:

        所示范围以度为单位。如果SRS使用其他单位,则范围使用其单位中的对应值。由于浮点运算,精确的范围限制稍有偏差。

      铸造点的条件

      当强制转换结果类型为时,应用这些条件

      • 如果要强制转换的表达式是格式良好的类型几何,函数结果为

      • 如果要强制转换的表达式是格式良好的类型几何多点包含一个,函数结果为.如果表达式包含多个,一个ER_INVALID_CAST_TO_GEOMETRY发生错误。

      • 如果要强制转换的表达式是格式良好的类型几何GeometryCollection只包含单个,函数结果为.如果表达式为空,则包含多个,或包含其他几何类型ER_INVALID_CAST_TO_GEOMETRY发生错误。

      • 如果要强制转换的表达式是类型为多点GeometryCollection,一个ER_INVALID_CAST_TO_GEOMETRY发生错误。

      类型转换为LineString的条件

      当强制转换结果类型为时,应用这些条件LineString

      • 如果要强制转换的表达式是格式良好的类型几何LineString,函数结果为LineString

      • 如果要强制转换的表达式是格式良好的类型几何多边形它没有内环,函数结果是aLineString以相同的顺序包含外环上的点的。如果表达式有内环,则anER_INVALID_CAST_TO_GEOMETRY发生错误。

      • 如果要强制转换的表达式是格式良好的类型几何多点如果至少包含两点,则函数结果为aLineString包含点的多点按照它们在表达式中出现的顺序。如果表达式只包含一个,一个ER_INVALID_CAST_TO_GEOMETRY发生错误。

      • 如果要强制转换的表达式是格式良好的类型几何MultiLineString包含一个LineString,函数结果为LineString.如果表达式包含多个LineString,一个ER_INVALID_CAST_TO_GEOMETRY发生错误。

      • 如果要强制转换的表达式是格式良好的类型几何GeometryCollection,只包含一个LineString,函数结果为LineString.如果表达式为空,则包含多个LineString,或包含其他几何类型ER_INVALID_CAST_TO_GEOMETRY发生错误。

      • 如果要强制转换的表达式是类型为LineString多边形多点MultiLineString,或GeometryCollection,一个ER_INVALID_CAST_TO_GEOMETRY发生错误。

      浇铸到多边形的条件

      当强制转换结果类型为时,应用这些条件多边形

      • 如果要强制转换的表达式是格式良好的类型几何LineString这是一个环(即起点和终点相同),函数结果是a多边形有一个外环组成的点LineString顺序是一样的。如果表达式不是一个环,则anER_INVALID_CAST_TO_GEOMETRY发生错误。如果环的顺序不正确(外环必须是逆时针方向的),则使用ER_INVALID_CAST_POLYGON_RING_DIRECTION发生错误。

      • 如果要强制转换的表达式是格式良好的类型几何多边形,函数结果为多边形

      • 如果要强制转换的表达式是格式良好的类型几何MultiLineString其中所有元素都是环,函数结果是a多边形与第一LineString作为外环和任何附加LineString价值如同内环。如果表达式的任何元素不是环,则为ER_INVALID_CAST_TO_GEOMETRY发生错误。如果任何一个环的顺序不对(外环必须是逆时针的,内环必须是顺时针的),则可以使用ER_INVALID_CAST_POLYGON_RING_DIRECTION发生错误。

      • 如果要强制转换的表达式是格式良好的类型几何多个多边形包含一个多边形,函数结果为多边形.如果表达式包含多个多边形,一个ER_INVALID_CAST_TO_GEOMETRY发生错误。

      • 如果要强制转换的表达式是格式良好的类型几何GeometryCollection只包含单个多边形,函数结果为多边形.如果表达式为空,则包含多个多边形,或包含其他几何类型ER_INVALID_CAST_TO_GEOMETRY发生错误。

      • 如果要强制转换的表达式是类型为LineString多边形MultiLineString多个多边形,或GeometryCollection,一个ER_INVALID_CAST_TO_GEOMETRY发生错误。

      多点类型转换的条件

      当强制转换结果类型为时,应用这些条件多点

      • 如果要强制转换的表达式是格式良好的类型几何,函数结果为a多点包含,作为它的唯一元素。

      • 如果要强制转换的表达式是格式良好的类型几何LineString,函数结果为a多点包含点的LineString顺序是一样的。

      • 如果要强制转换的表达式是格式良好的类型几何多点,函数结果为多点

      • 如果要强制转换的表达式是格式良好的类型几何GeometryCollection只包含点,函数结果是a多点包含这些点。如果GeometryCollection是空的或包含其他几何类型的ER_INVALID_CAST_TO_GEOMETRY发生错误。

      • 如果要强制转换的表达式是类型为LineString多点,或GeometryCollection,一个ER_INVALID_CAST_TO_GEOMETRY发生错误。

      类型转换为MultiLineString的条件

      当强制转换结果类型为时,应用这些条件MultiLineString

      • 如果要强制转换的表达式是格式良好的类型几何LineString,函数结果为aMultiLineString包含,LineString作为它的唯一元素。

      • 如果要强制转换的表达式是格式良好的类型几何多边形,函数结果为aMultiLineString包含外环的多边形作为它的第一个元素,任何内环作为附加元素,它们在表达式中出现的顺序相同。

      • 如果要强制转换的表达式是格式良好的类型几何MultiLineString,函数结果为MultiLineString

      • 如果要强制转换的表达式是格式良好的类型几何多个多边形只包含没有内环的多边形,函数结果为MultiLineString按多边形环在表达式中出现的顺序包含多边形环。如果表达式包含任何带内环的多边形,则ER_WRONG_PARAMETERS_TO_STORED_FCT发生错误。

      • 如果要强制转换的表达式是格式良好的类型几何GeometryCollection该函数只包含行字符串,结果为MultiLineString包含这些线。如果表达式为空或包含其他几何类型,则会生成ER_INVALID_CAST_TO_GEOMETRY发生错误。

      • 如果要强制转换的表达式是类型为LineString多边形MultiLineString多个多边形,或GeometryCollection,一个ER_INVALID_CAST_TO_GEOMETRY发生错误。

      浇铸到多多边形的条件

      当强制转换结果类型为时,应用这些条件多个多边形

      • 如果要强制转换的表达式是格式良好的类型几何多边形,函数结果为a多个多边形包含多边形作为它的唯一元素。

      • 如果要强制转换的表达式是格式良好的类型几何MultiLineString其中所有元素都是环,函数结果是a多个多边形包含一个多边形表达式的每个元素只有一个外环。如果任何元素不是环,则是ER_INVALID_CAST_TO_GEOMETRY发生错误。如果任何环的顺序不对(外环必须是逆时针方向),则需要更换ER_INVALID_CAST_POLYGON_RING_DIRECTION发生错误。

      • 如果要强制转换的表达式是格式良好的类型几何多个多边形,函数结果为多个多边形

      • 如果要强制转换的表达式是格式良好的类型几何GeometryCollection只包含多边形,函数结果是多个多边形包含这些多边形。如果表达式为空或包含其他几何类型,则会生成ER_INVALID_CAST_TO_GEOMETRY发生错误。

      • 如果要强制转换的表达式是类型为多边形MultiLineString多个多边形,或GeometryCollection,一个ER_INVALID_CAST_TO_GEOMETRY发生错误。

      铸件到几何集合的条件

      当强制转换结果类型为时,应用这些条件GeometryCollection

      • GeometryCollection而且GeomCollection是相同结果类型的同义词。

      • 如果要强制转换的表达式是格式良好的类型几何,函数结果为aGeometryCollection包含,作为它的唯一元素。

      • 如果要强制转换的表达式是格式良好的类型几何LineString,函数结果为aGeometryCollection包含,LineString作为它的唯一元素。

      • 如果要强制转换的表达式是格式良好的类型几何多边形,函数结果为aGeometryCollection包含,多边形作为它的唯一元素。

      • 如果要强制转换的表达式是格式良好的类型几何多点,函数结果为aGeometryCollection按点在表达式中出现的顺序包含点。

      • 如果要强制转换的表达式是格式良好的类型几何MultiLineString,函数结果为aGeometryCollection按它们在表达式中出现的顺序包含行字符串。

      • 如果要强制转换的表达式是格式良好的类型几何多个多边形,函数结果为aGeometryCollection的元素多个多边形按照它们在表达式中出现的顺序。

      • 如果要强制转换的表达式是格式良好的类型几何GeometryCollection,函数结果为GeometryCollection

    • 时间

      产生一个时间价值。

    • 无符号(整数)

      产生无符号整数值。

    • 一年

      产生一个一年价值。在MySQL 8.0.22中新增。这些规则管理转换为一年

      • 对于1901-2155范围内的四位数,或者对于可以被解释为该范围内四位数的字符串,返回相应的一年价值。

      • 对于由一个或两个数字组成的数字,或对于可以解释为这样一个数字的字符串,返回a一年值如下:

        • 如果数字在1-69(包括在内)的范围内,则加2000并返回总和。

        • 如果数字在70-99的范围内,加上1900并返回总和。

      • 对于计算结果为0的字符串,返回2000。

      • 对于数字0,返回0。

      • 对于一个日期DATETIME,或时间戳值,返回一年值的一部分。对于一个时间值,返回当前年份。

        如果不指定的类型时间参数,你可能会得到一个不同于你所期望的结果,如下所示:

        mysql> SELECT CONVERT("11:35:00", YEAR), CONVERT(TIME "11:35:00", YEAR);+---------------------------+--------------------------------+ | 转换(“11:35:00”,年)|转换(“11:35:00”时间 ) | +---------------------------+--------------------------------+ | 2011 | 2020  | +---------------------------+--------------------------------+
      • 如果实参是类型小数小数,或真正的,四舍五入到最接近的整数,然后尝试将该值转换为一年使用整数值的规则,如下所示:

        mysql> SELECT CONVERT(1944.35, YEAR), CONVERT(1944.50, YEAR);+------------------------+------------------------+ | 转换(1944.35年)|转换(1944.50年 ) | +------------------------+------------------------+ | 1944 | 1945  | +------------------------+------------------------+ 1行组(0.00秒)mysql >选择转换(66.35年),转换(66.50年);+----------------------+----------------------+ | 转换(66.35年)|转换(66.50年 ) | +----------------------+----------------------+ | 2066 | 2067  | +----------------------+----------------------+ 1行集(0.00秒)
      • 类型的实参几何不能转换为一年

      • 对于不能成功转换为的值一年,还

      包含非数字字符的字符串值在转换前必须被截断将引发警告,如下所示:

      mysql> SELECT CONVERT("1979aaa", YEAR);+--------------------------+ | 转换(“1979 aaa” ) | +--------------------------+ | 1979年  | +--------------------------+ 1行集,警告(0.00秒)mysql >显示警告;+---------+------+-------------------------------------------+ | 水平| |消息代码  | +---------+------+-------------------------------------------+ | 警告| 1292 |截断不正确的价值:“1979 aaa ' | +---------+------+-------------------------------------------+