强制转换函数和操作符支持将值从一种数据类型转换为另一种数据类型。
将()
与一个使用
子句在字符集之间转换数据:
转换(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_col从tbl_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命令行客户端.演员(
timestamp_value
在的时区timezone_specifier
DATETIME ((精度
)))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是语法。转换(
在不同的字符集之间转换数据。在MySQL中,转码名称与相应的字符集名称相同。例如,该语句转换字符串expr
使用transcoding_name
)“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,但具有超出范围的经度或纬度,则会发生错误:
如果经度值不在(−180,180]的范围内,则输入
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
发生错误。如果纬度值不在[- 90,90]的范围内,则输入[- 90,90]
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
发生错误。
所示范围以度为单位。如果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 ' | +---------+------+-------------------------------------------+