mysql8 s开头函数学习

199.SCHEMA()

此函数是 DATABASE() 的同义词。

200.SEC_TO_TIME(seconds)

返回秒参数, 转换为小时、分钟和秒,作为 TIME 值。的范围 结果被限制为 TIME 数据类型的结果。警告 如果参数对应于该值之外的值,则发生 范围。

如果秒为 NULL则结果为NULL。

mysql> SELECT SEC_TO_TIME(2378);
        -> '00:39:38'
mysql> SELECT SEC_TO_TIME(2378) + 0;
        -> 3938

201.STR_TO_DATE(str,format)

这是 DATE_FORMAT() 函数的反函数。它 采用字符串 str 和格式字符串格式。STR_TO_DATE() 返回一个 DATETIME 值,如果格式字符串包含日期和时间部分,如果字符串包含 DATE 或 TIME 值 仅包含日期或时间部分。如果 str 或格式为 NULL, 该函数返回 NULL。如果日期NULL, 从 str 中提取的时间或日期时间值是非法的,STR_TO_DATE() 返回null并生成警告。

服务器扫描试图匹配格式。格式 字符串可以包含文字字符和格式说明符以% 开头。格式中的文字字符必须与 str 中的字面匹配。格式中的格式说明符必须与日期或时间匹配 部分在 str.对于说明符 可以在格式中使用,请参阅 DATE_FORMAT() 函数 描述。

mysql> SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');
        -> '2013-05-01'
mysql> SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y');
        -> '2013-05-01'

扫描从 str 的开头开始,如果发现格式不匹配,则扫描失败。

mysql> SELECT STR_TO_DATE('a09:30:17','a%h:%i:%s');
        -> '09:30:17'
mysql> SELECT STR_TO_DATE('a09:30:17','%h:%i:%s');
        -> NULL
mysql> SELECT STR_TO_DATE('09:30:17a','%h:%i:%s');
        -> '09:30:17'

未指定的日期或时间部分的值为 0,因此 str 中未完全指定的值会产生带有某些或的结果 所有零件设置为 0:

mysql> SELECT STR_TO_DATE('a09:30:17','a%h:%i:%s');
        -> '09:30:17'
mysql> SELECT STR_TO_DATE('a09:30:17','%h:%i:%s');
        -> NULL
mysql> SELECT STR_TO_DATE('09:30:17a','%h:%i:%s');
        -> '09:30:17'

对日期值部分的范围检查如第 11.2.2 节 “日期、日期时间和时间戳类型”中所述。例如,这意味着“零”日期或零件值为 0 的日期是 除非 SQL 模式设置为不允许此类值,否则允许。

mysql> SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y');
        -> '0000-00-00'
mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');
        -> '2004-04-31'

如果NO_ZERO_DATE SQL 模式 启用,不允许零日期。在这种情况下,STR_TO_DATE() 返回NULL并生成警告:

mysql> SET sql_mode = '';
mysql> SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y');
+---------------------------------------+
| STR_TO_DATE('00/00/0000', '%m/%d/%Y') |
+---------------------------------------+
| 0000-00-00                            |
+---------------------------------------+
mysql> SET sql_mode = 'NO_ZERO_DATE';
mysql> SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y');
+---------------------------------------+
| STR_TO_DATE('00/00/0000', '%m/%d/%Y') |
+---------------------------------------+
| NULL                                  |
+---------------------------------------+
mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Warning
   Code: 1411
Message: Incorrect datetime value: '00/00/0000' for function str_to_date

注意
不能使用格式转换 年周字符串到日期,因为年份的组合和周不唯一标识年和月,如果 周跨越一个月边界。将年周转换为 "%X%V"日期,您还应该指定工作日:

mysql> SELECT STR_TO_DATE('200442 Monday', '%X%V %W');
        -> '2004-10-18'

202.SECOND(time)

返回时间秒,在 范围为0-59 ,或者如果时间为NULL则结果为 NULL。 

mysql> SELECT SECOND('10:05:03');
        -> 3

203.SESSION_USER()

SESSION_USER() 是 USER() 的同义词。

204.SYSTEM_USER()

SYSTEM_USER() 是 USER() 的同义词。

注意
SYSTEM_USER() 函数是 与SYSTEM_USER特权不同。前者返回当前 MySQL 帐户 名字。后者区分系统用户和常规用户 用户帐户类别(请参见第 6.2.11 节 “帐户类别”)。

205.SHA1(str), SHA(str)

计算字符串的 SHA-1 160 位校验和,如 RFC 3174(安全哈希算法)中所述。值为 以 40 个十六进制数字的字符串形式返回,或者如果参数为NULL .可能的用途之一 函数作为哈希键。请参阅开头的注释 本节介绍如何高效存储哈希值。SHA() 是 SHA1() 的同义词。

返回值是连接字符集中的字符串。

mysql> SELECT SHA1('abc');
        -> 'a9993e364706816aba3e25717850c26c9cd0d89d'

SHA1() 可以被认为是 加密更安全,相当于MD5()。但是,请参阅注释 关于开头的 MD5 和 SHA-1 算法 部分。


206.SHA2(str, hash_length)

计算 SHA-2 系列哈希函数 (SHA-224, SHA-256、SHA-384 和 SHA-512)。第一个参数是 要散列的纯文本字符串。第二个参数指示 结果的所需位长度,必须具有值 的 224、256、384、512 或 0(相当于 256)。如果 参数为或哈希长度 不是允许的值之一,返回值为NULL 。否则函数结果为包含所需位数的哈希值。

返回值是连接字符集中的字符串。

mysql> SELECT SHA2('abc', 224);
        -> '23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7'

仅当MySQL配置了SSL时,此功能才有效 支持。

可以考虑 SHA2() 加密比 MD5() 或 SHA1() 更安全。


207.SIGN(X)

返回参数的符号为 - 或 +具体取决于 X 是负数、零还是 正数。

mysql> SELECT SIGN(-32);
        -> -1
mysql> SELECT SIGN(0);
        -> 0
mysql> SELECT SIGN(234);
        -> 1


208.SIN(X)

返回 X 的正弦值,其中 X 以弧度为单位。

mysql> SELECT SIN(PI());
        -> 1.2246063538224e-16
mysql> SELECT ROUND(SIN(PI()));
        -> 0

209.SLEEP(duration)

休眠(暂停)持续时间参数给出的秒数,然后返回 0。 持续时间可能有小数部分。如果参数为NULL或负数,则 SLEEP() 生成警告,或 严格 SQL 模式下的错误。

当睡眠恢复正常(不中断)时,它会恢复 0:

mysql> SELECT SLEEP(1000);
+-------------+
| SLEEP(1000) |
+-------------+
|           0 |
+-------------+


当 SLEEP() 是唯一的东西时 由中断的查询调用,它返回 1 和 查询本身不返回错误。无论查询是否如此,都是如此 被杀死或超时:

此语句使用来自另一个会话的 KILL QUERY 中断:

mysql> SELECT SLEEP(1000);
+-------------+
| SLEEP(1000) |
+-------------+
|           1 |
+-------------+

此语句因超时而中断:

mysql> SELECT /*+ MAX_EXECUTION_TIME(1) */ SLEEP(1000);
+-------------+
| SLEEP(1000) |
+-------------+
|           1 |
+-------------+

当 SLEEP() 只是 查询中断时,查询将返回错误:

此语句使用来自另一个会话的 KILL QUERY 中断:

mysql> SELECT 1 FROM t1 WHERE SLEEP(1000);
ERROR 1317 (70100): Query execution was interrupted

此语句因超时而中断:

mysql> SELECT /*+ MAX_EXECUTION_TIME(1000) */ 1 FROM t1 WHERE SLEEP(1000);
ERROR 3024 (HY000): Query execution was interrupted, maximum statement
execution time exceeded

此函数对于基于语句的复制是不安全的。一个 如果在将 binlog_format 设置为STATEMENT 时使用此功能,则会记录警告。

210.SOUNDEX(str)

从 str 返回一个 soundex 字符串, 或者如果 str 是 .两根听起来几乎 相同的应该具有相同的声音字符串。标准声音 字符串长度为四个字符,但 SOUNDEX() 函数返回一个 任意长的字符串。您可以在结果上使用 SUBSTRING() 来 获取标准 Soundex 字符串。str 中的所有非字母字符都将被忽略。所有国际 A-Z 范围之外的字母字符被视为 元音。

重要
使用 SOUNDEX() 时,您 应注意以下限制:

当前实现的此功能旨在 适用于英语字符串 只。其他语言的字符串可能无法生成可靠的字符串 结果。

此函数不保证提供一致的 使用多字节字符集的字符串的结果。

mysql> SELECT SOUNDEX('Hello');
        -> 'H400'
mysql> SELECT SOUNDEX('Quadratically');
        -> 'Q36324'

注意
此函数实现了原始的 Soundex 算法,而不是 更流行的增强版本(也由D描述。 高德纳)。不同之处在于原始版本丢弃 元音在前,重复后,而增强型 版本首先丢弃重复项,其次丢弃元音。


211.expr1 SOUNDS LIKE expr2

这与 SOUNDEX(expr1) 相同。 = SOUNDEX(expr2)。
SOURCE_POS_WAIT(log_name,log_pos[,timeout][,channel])

此功能用于控制源/副本 同步。它会阻止,直到副本读取并 将所有更新应用于指定位置 源的二进制日志。从 MySQL 8.0.26 开始,使用 SOURCE_POS_WAIT() 代替 MASTER_POS_WAIT(),即 已从该版本中弃用。在 MySQL 8.0.26 之前的版本中, 使用 MASTER_POS_WAIT()。

返回值是副本具有的日志事件数 等待 前进到指定位置。函数 如果复制 SQL 线程返回 未启动,复制副本的源信息未启动 已初始化、参数不正确或发生错误返回NULL。如果复制 SQL 线程在 SOURCE_POS_WAIT() 等待时停止, 该函数返回 -1。如果副本 超过指定位置,函数返回 NULL。

如果二进制日志文件位置已标记为无效, 该函数将一直等待,直到知道有效的文件位置。这 二进制日志文件位置可以在更改复制源时标记为无效 TO 选项设置为GTID_ONLY 复制通道,并且服务器重新启动或 复制已停止。文件位置在以下时间后生效 事务已成功应用于给定文件 位置。如果施用者没有达到规定的位置, 该函数一直等到超时。使用 SHOW REPLICA STATUS 语句检查二进制日志文件位置是否已标记为无效。

在多线程副本上,该函数等待直到到期 当检查点操作调用时,由 replica_checkpoint_group 或 replica_checkpoint_period 系统变量设置的限制 更新复制副本的状态。取决于 系统变量,因此该函数可能会返回一些 到达指定位置后的时间。

如果正在使用二进制日志事务压缩,并且 指定位置的事务有效负载被压缩 (作为 )Transaction_payload_event, 函数等到整个事务被读取。

如果指定了超时值,SOURCE_POS_WAIT() 将停止等待 当超时秒数已过时。超时必须大于 0;一个 零或负超时表示否 超时。

可选通道值启用 您可以命名函数应用于哪个复制通道。

此函数STATEMENT对于基于语句的复制是不安全的。一个 如果在将 binlog_format 设置为 时使用此功能,则会记录警告。


212.SPACE(N)

返回由 N 个空格字符组成的字符串。

mysql> SELECT SPACE(6);
        -> '      '


213.SQRT(X)

返回非负数 X 的平方根。

mysql> SELECT SQRT(4);
        -> 2
mysql> SELECT SQRT(20);
        -> 4.4721359549996
mysql> SELECT SQRT(-16);
        -> NULL


214.ST_Area({poly|mpoly})

返回一个双精度数字,指示PolygonMultiPolygon or 参数的面积,如其 空间参考系统。

从 MySQL 8.0.13 开始,ST_Area() 按照简介中所述处理其参数 本节,但以下情况除外:

如果几何图形在几何上无效,则 结果是一个未定义的区域(即,它可以是任何 数字),或发生错误。

如果几何图形有效但不是PolygonMultiPolygon 或 对象,则会发生ER_UNEXPECTED_GEOMETRY_TYPE错误。

如果面积计算结果为+inf ,则会发生ER_DATA_OUT_OF_RANGE错误。

如果几何具有具有经度或 纬度超出范围,则发生错误:

如果经度值不在范围内 (−180, 180]),发生ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE错误 (ER_LONGITUDE_OUT_OF_RANGE在MySQL 8.0.12之前)。

如果纬度值不在 [−90, 90],发生ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE错误 (ER_LATITUDE_OUT_OF_RANGE MySQL 8.0.12 之前)。

显示的范围以度为单位。确切的范围限制 由于浮点运算而略有偏差。

在 MySQL 8.0.13 之前,ST_Area() 处理其 本节引言中所述的参数, 但以下情况除外:

对于维度为 0 或 1 的参数,结果为 0。

如果几何图形为空,则返回值为 0 而不是 NULL。

对于几何集合,结果是 所有组件的面积值。如果几何形状 集合为空,其区域返回为 0。

如果几何具有地理的 SRID 值 空间参考系统 (SRS),则发生ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误。

mysql> SET @poly =
       'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))';
mysql> SELECT ST_Area(ST_GeomFromText(@poly));
+---------------------------------+
| ST_Area(ST_GeomFromText(@poly)) |
+---------------------------------+
|                               4 |
+---------------------------------+

mysql> SET @mpoly =
       'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';
mysql> SELECT ST_Area(ST_GeomFromText(@mpoly));
+----------------------------------+
| ST_Area(ST_GeomFromText(@mpoly)) |
+----------------------------------+
|                                8 |
+----------------------------------+


215.ST_AsBinary(), ST_AsWKB()

将内部几何格式的值转换为其 WKB 表示并返回二进制结果。

函数返回值具有地理坐标 (纬度、经度)按空间指定的顺序 适用于几何参数的参考系。一 可选选项参数可以是 给定以覆盖默认轴顺序。

ST_AsBinary() 和 ST_AsWKB() 按照引言中所述处理它们的参数 本节。

mysql> SET @g = ST_LineFromText('LINESTRING(0 5,5 10,10 15)', 4326);
mysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g)));
+-----------------------------------------+
| ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g))) |
+-----------------------------------------+
| LINESTRING(5 0,10 5,15 10)              |
+-----------------------------------------+
mysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=long-lat')));
+----------------------------------------------------------------+
| ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=long-lat'))) |
+----------------------------------------------------------------+
| LINESTRING(0 5,5 10,10 15)                                     |
+----------------------------------------------------------------+
mysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=lat-long')));
+----------------------------------------------------------------+
| ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=lat-long'))) |
+----------------------------------------------------------------+
| LINESTRING(5 0,10 5,15 10)                                     |
+----------------------------------------------------------------+


216.ST_AsGeoJSON(g [, max_dec_digits [, options]])

从几何图形 g 生成 GeoJSON 对象。对象字符串具有 连接字符集和排序规则。

如果任何参数为NULL ,则返回值 是NULL。如果任何非参数无效,则会发生错误。

max_dec_digits(如果指定), 限制坐标和原因的小数位数 输出的四舍五入。如果未指定,则此参数默认为 最大值 232 − 1. 最小值为 0。

选项(如果指定)为 位掩码。下表显示了允许的标志值。 如果几何参数的 SRID 为 0,则没有 CRS 对象 甚至为那些请求一个标志值的标志值生成。

   标记意义
0 别无选择。如果选项是 未指定。
1 向输出添加边界框。
2 将短格式 CRS URN 添加到输出。默认格式为短格式 格式 ().EPSG:srid
3 添加长格式 CRS 骨灰盒 (). 此标志将覆盖标志 2。例如,选项值 的 5 和 7 表示相同(添加一个边界框和一个 长格式 CRS URN)。urn:ogc:def:crs:EPSG::srid

mysql> SELECT ST_AsGeoJSON(ST_GeomFromText('POINT(11.11111 12.22222)'),2);
+-------------------------------------------------------------+
| ST_AsGeoJSON(ST_GeomFromText('POINT(11.11111 12.22222)'),2) |
+-------------------------------------------------------------+
| {"type": "Point", "coordinates": [11.11, 12.22]}            |
+-------------------------------------------------------------+


217.ST_AsText(g [, 选项]), ST_AsWKT(g [, 选项])

将内部几何格式的值转换为其 WKT 表示并返回字符串结果。

函数返回值具有地理坐标 (纬度、经度)按空间指定的顺序 适用于几何参数的参考系。一 可选选项参数可以是 给定以覆盖默认轴顺序。

ST_AsText() 和 ST_AsWKT() 按照 简介中的说明处理它们的参数 本节。

mysql> SET @g = 'LineString(1 1,2 2,3 3)';
mysql> SELECT ST_AsText(ST_GeomFromText(@g));
+--------------------------------+
| ST_AsText(ST_GeomFromText(@g)) |
+--------------------------------+
| LINESTRING(1 1,2 2,3 3)        |
+--------------------------------+


值的输出包括 每个点两边的括号。例如:MultiPoint

mysql> SELECT ST_AsText(ST_GeomFromText(@mp));
+---------------------------------+
| ST_AsText(ST_GeomFromText(@mp)) |
+---------------------------------+
| MULTIPOINT((1 1),(2 2),(3 3))   |
+---------------------------------+


218.ST_Buffer(g, d [, strategy1 [, strategy2 [, strategy3]]])

返回一个几何图形,该几何图形表示其距离的所有点 从几何值 g 较小 小于或等于 d 的距离。 结果与几何参数位于相同的 SRS 中。

如果几何参数为空,则 ST_Buffer() 返回一个空 几何学。

如果距离为 0,则 ST_Buffer() 返回 几何参数未更改:

mysql> SET @pt = ST_GeomFromText('POINT(0 0)');
mysql> SELECT ST_AsText(ST_Buffer(@pt, 0));
+------------------------------+
| ST_AsText(ST_Buffer(@pt, 0)) |
+------------------------------+
| POINT(0 0)                   |
+------------------------------+


如果几何参数位于笛卡尔 SRS 中:

ST_Buffer() 支持 和值以及几何的负距离 包含 或 值的集合。PolygonMultiPolygonPolygonMultiPolygon

如果结果减少到消失太多,则 结果为空几何图形。

对于负数为 ST_Buffer() 的 ER_WRONG_ARGUMENTS 错误 距离 、 、 和 值,以及 不包含任何 OR 值的几何集合。PointMultiPointLineStringMultiLineStringPolygonMultiPolygon

如果几何参数位于地理 SRS 中:

在 MySQL 8.0.26 之前,会发生ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误。

从 MySQL 8.0.26 开始,几何 允许使用地理SRS。为 非几何形状,仍会发生ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误。

对于允许地理几何的 MySQL 版本:

如果距离不是负数并且没有策略 指定时,该函数返回 在其SRS中。距离 参数必须采用 SRS 距离单位(当前 总是米)。

如果距离为负或指定了任何策略(除外),则ER_WRONG_ARGUMENTS错误NULL 。

ST_Buffer() 最多允许三个 距离参数后面的可选策略参数。 策略会影响缓冲区计算。这些参数是 ST_Buffer_Strategy() 函数生成的字节字符串值, 用于点、连接和结束策略:

PointMultiPoint点策略适用于几何图形。如果没有点 指定策略,默认值为 ST_Buffer_Strategy('point_circle', 32).

LineStringMultiLineStringPolygonMultiPolygon连接策略适用于 、 和几何图形。如果没有加入 指定策略,默认值为 ST_Buffer_Strategy('join_round', 32).

LineStringMultiLineString终端策略适用于几何形状。如果没有结束 指定策略,默认值为 ST_Buffer_Strategy('end_round', 32).

每种类型最多可以指定一种策略,并且可以 以任何顺序给出。

如果缓冲区策略无效,则ER_WRONG_ARGUMENTS错误 发生。策略在上述任何一项下均无效 情况 下:

给定类型的多个策略(点、连接或结束) 被指定。

不是策略的值(例如任意值) 二进制字符串或数字)作为策略传递。

PointPointMultiPoint几何不包含 OR 值。

LineStringPolygonMultiLinestringMultiPolygon传递结束或连接策略以及几何图形 不包含 、 或值。

mysql> SET @pt = ST_GeomFromText('POINT(0 0)');
mysql> SET @pt_strategy = ST_Buffer_Strategy('point_square');
mysql> SELECT ST_AsText(ST_Buffer(@pt, 2, @pt_strategy));
+--------------------------------------------+
| ST_AsText(ST_Buffer(@pt, 2, @pt_strategy)) |
+--------------------------------------------+
| POLYGON((-2 -2,2 -2,2 2,-2 2,-2 -2))       |
+--------------------------------------------+
 
mysql> SET @ls = ST_GeomFromText('LINESTRING(0 0,0 5,5 5)');
mysql> SET @end_strategy = ST_Buffer_Strategy('end_flat');
mysql> SET @join_strategy = ST_Buffer_Strategy('join_round', 10);
mysql> SELECT ST_AsText(ST_Buffer(@ls, 5, @end_strategy, @join_strategy))
+---------------------------------------------------------------+
| ST_AsText(ST_Buffer(@ls, 5, @end_strategy, @join_strategy))   |
+---------------------------------------------------------------+
| POLYGON((5 5,5 10,0 10,-3.5355339059327373 8.535533905932738, |
| -5 5,-5 0,0 0,5 0,5 5))                                       |
+---------------------------------------------------------------+


219.ST_Buffer_Strategy(strategy [, points_per_circle])

此函数返回一个策略字节字符串,用于 ST_Buffer() 以影响缓冲区 计算。

有关策略的信息可在 Boost.org 上找到。

第一个参数必须是指示策略的字符串 选择:

对于点策略,允许的值为'point_circle' 和'point_square' 。

对于联接策略,允许的值为'join_round 和 ''join_miter'。

对于最终策略,允许的值为'end_round 和 ''end_flat'。

如果第一个参数是 、、 或'point_circle ,则points_per_circle参数必须是 以正数值给出。最大值points_per_circle值为 max_points_in_geometry系统的价值变量。

ST_Buffer_Strategy() 句柄 其参数如引言中所述 部分,但以下情况除外:

如果任何参数无效,则ER_WRONG_ARGUMENTS错误 发生。

如果第一个参数是'point_square' 或'end_flat',则points_per_circle参数必须 未给出或ER_WRONG_ARGUMENTS错误 发生。


220.ST_Centroid({poly|mpoly})

将 or 参数的数学质心作为 返回 。结果不保证 在 .PolygonMultiPolygonPointMultiPolygon

此函数通过计算处理几何集合 最高维度组件的质心点 集合。这些成分被提取并制成 单个 、 或用于质心计算。MultiPolygonMultiLineStringMultiPoint

ST_Centroid() 处理其 本节引言中所述的参数, 但以下情况除外:

返回值适用于 参数为空的 几何集合。

如果几何具有地理的 SRID 值 空间参考系统 (SRS),则发生ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误。

mysql> SET @poly =
       ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))');
mysql> SELECT ST_GeometryType(@poly),ST_AsText(ST_Centroid(@poly));
+------------------------+--------------------------------------------+
| ST_GeometryType(@poly) | ST_AsText(ST_Centroid(@poly))              |
+------------------------+--------------------------------------------+
| POLYGON                | POINT(4.958333333333333 4.958333333333333) |
+------------------------+--------------------------------------------+


221.ST_Collect([DISTINCT] g) [over_clause]

DISTINCT聚合几何值并返回单个几何 集合值。有了这个选项, 返回不同几何参数的聚合。

GROUP BY与其他聚合函数一样,可用于将参数分组到子集中。ST_Collect() 返回一个 每个子集的聚合值。

如果存在over_clause则此函数作为窗口函数执行。over_clause如第 12.21.2 节 “窗口函数概念和语法”中所述。与大多数相反 支持窗口的聚合函数,ST_Collect() 允许将over_clause与 一起使用。DISTINCT

ST_Collect() 处理其 参数如下:

NULL参数将被忽略。

如果所有参数都是或NULL 聚合结果为空,返回值为 NULL。

如果任何几何参数在语法上不是 形状良好的几何形状,ER_GIS_INVALID_DATA错误 发生。

如果任何几何参数是语法格式良好的 未定义空间参考系统 (SRS) 中的几何, ER_SRS_NOT_FOUND错误 发生。

如果有多个几何参数和那些 参数在同一个 SRS 中,返回值在 SRS。如果这些参数不在同一 SRS 中,则会发生ER_GIS_DIFFERENT_SRIDS_AGGREGATION错误。

结果是可能的最窄或值

如果所有参数都是值, 结果是一个值。

如果所有参数都是值,则结果为值。

如果所有参数都是值,则结果为值。

否则,参数是几何类型的混合结果是一个值。

此示例数据集按年份和 制造地点:

CREATE TABLE product (
  year INTEGER,
  product VARCHAR(256),
  location Geometry
);

INSERT INTO product
(year,  product,     location) VALUES
(2000, "Calculator", ST_GeomFromText('point(60 -24)',4326)),
(2000, "Computer"  , ST_GeomFromText('point(28 -77)',4326)),
(2000, "Abacus"    , ST_GeomFromText('point(28 -77)',4326)),
(2000, "TV"        , ST_GeomFromText('point(38  60)',4326)),
(2001, "Calculator", ST_GeomFromText('point(60 -24)',4326)),
(2001, "Computer"  , ST_GeomFromText('point(28 -77)',4326));
在数据集上使用 ST_Collect() 的一些示例查询:

mysql> SELECT ST_AsText(ST_Collect(location)) AS result
       FROM product;
+------------------------------------------------------------------+
| result                                                           |
+------------------------------------------------------------------+
| MULTIPOINT((60 -24),(28 -77),(28 -77),(38 60),(60 -24),(28 -77)) |
+------------------------------------------------------------------+

mysql> SELECT ST_AsText(ST_Collect(DISTINCT location)) AS result
       FROM product;
+---------------------------------------+
| result                                |
+---------------------------------------+
| MULTIPOINT((60 -24),(28 -77),(38 60)) |
+---------------------------------------+

mysql> SELECT year, ST_AsText(ST_Collect(location)) AS result
       FROM product GROUP BY year;
+------+------------------------------------------------+
| year | result                                         |
+------+------------------------------------------------+
| 2000 | MULTIPOINT((60 -24),(28 -77),(28 -77),(38 60)) |
| 2001 | MULTIPOINT((60 -24),(28 -77))                  |
+------+------------------------------------------------+

mysql> SELECT year, ST_AsText(ST_Collect(DISTINCT location)) AS result
       FROM product GROUP BY year;
+------+---------------------------------------+
| year | result                                |
+------+---------------------------------------+
| 2000 | MULTIPOINT((60 -24),(28 -77),(38 60)) |
| 2001 | MULTIPOINT((60 -24),(28 -77))         |
+------+---------------------------------------+

# selects nothing
mysql> SELECT ST_Collect(location) AS result
       FROM product WHERE year = 1999;
+--------+
| result |
+--------+
| NULL   |
+--------+

mysql> SELECT ST_AsText(ST_Collect(location)
         OVER (ORDER BY year, product ROWS BETWEEN 1 PRECEDING AND CURRENT ROW))
         AS result
       FROM product;
+-------------------------------+
| result                        |
+-------------------------------+
| MULTIPOINT((28 -77))          |
| MULTIPOINT((28 -77),(60 -24)) |
| MULTIPOINT((60 -24),(28 -77)) |
| MULTIPOINT((28 -77),(38 60))  |
| MULTIPOINT((38 60),(60 -24))  |
| MULTIPOINT((60 -24),(28 -77)) |
+-------------------------------+

此函数是在MySQL 8.0.24中添加的。


222.ST_Contains(g1, g2)

返回 1 或 0 以指示 g1 是否完全包含 g2。这测试相反 关系为 ST_Within()。

ST_Contains() 处理其 本节简介中所述的参数。

223.ST_Crosses(g1, g2)

两个几何图形在空间上相交,如果它们的 空间关系具有以下属性:

除非 g1 和 g2 都是维度 1:如果 g2 的内部具有与 G1的内部,但G2没有覆盖整个 G1的内部。

如果 g1 和 g2 的维度均为 1:如果 线在有限数量的点中相互交叉 (即没有公共线段,只有单个点 常见)。

此函数返回 1 或 0 以指示 g1 在空间上是否与 g2 相交。

ST_Crosses() 处理其 本节简介中所述的参数 除了返回值为NULL 这些附加条件:

G1 的维度为 2 ( 或 )PolygonMultiPolygon。

G2 的维度为 1 ( 或 )PointMultiPoint。


224.ST_Difference(g1, g2)

返回一个几何图形,该几何图形表示点集差值 几何值 G1 和 G2。结果在相同的 SRS 中 作为几何参数。

从MySQL 8.0.26开始,ST_Difference()允许 笛卡尔或地理 SRS 中的参数。之前 MySQL 8.0.26,ST_Difference()只允许在笛卡尔SRS中参数;对于参数 地理 SRS,发生ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误。

ST_Difference() 处理其 本节简介中所述的参数。

 
mysql> SET @g1 = Point(1,1), @g2 = Point(2,2);
mysql> SELECT ST_AsText(ST_Difference(@g1, @g2));
+------------------------------------+
| ST_AsText(ST_Difference(@g1, @g2)) |
+------------------------------------+
| POINT(1 1)                         |
+------------------------------------+


225.ST_Dimension(g)

返回几何值 g 的固有尺寸。维度可以是 −1, 0、1 或 2。这些值的含义在第 11.4.2.2 节 “几何类”中给出。

ST_Dimension() 处理其 本节简介中所述的参数。

mysql> SELECT ST_Dimension(ST_GeomFromText('LineString(1 1,2 2)'));
+------------------------------------------------------+
| ST_Dimension(ST_GeomFromText('LineString(1 1,2 2)')) |
+------------------------------------------------------+
|                                                    1 |
+------------------------------------------------------+


226.ST_Disjoint(g1, g2)

返回 1 或 0 以指示 g1 在空间上是否与 (不相交)G2.

ST_Disjoint() 处理其 本节简介中所述的参数。

227.ST_Distance(g1, g2 [, unit])

返回 g1 和 g2 之间的距离,以长度测量 几何的空间参考系统 (SRS) 的单位 参数,或者以可选单位参数的单位(如果为 指定。

此函数通过返回 所有组合中的最短距离 两个几何参数的组件。

ST_Distance() 处理其 几何参数,如本文简介中所述 部分,但以下情况除外:

ST_Distance() 检测 地理(椭圆体)空间中的参数 参考系并返回大地测量距离 椭球体。从 MySQL 8.0.18 开始,ST_Distance() 支持 地理 SRS 参数的距离计算 所有几何类型。在 MySQL 8.0.18 之前,唯一的 允许的地理参数类型为 和 , 或(按任何参数顺序)。 如果使用其他几何类型参数组合调用 在地理 SRS 中,会发生ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误。

如果任何参数在几何上无效,则 结果是一个未定义的距离(即,它可以是任何 数字),或发生错误。

如果产生中间或最终结果NaN或负数,则会发生ER_GIS_INVALID_DATA错误。

从MySQL 8.0.14开始,ST_Distance()允许 可选的单位参数 指定返回的距离值的线性单位。ST_Distance() 处理其单位参数,如 本节简介。

mysql> SET @g1 = ST_GeomFromText('POINT(1 1)');
mysql> SET @g2 = ST_GeomFromText('POINT(2 2)');
mysql> SELECT ST_Distance(@g1, @g2);
+-----------------------+
| ST_Distance(@g1, @g2) |
+-----------------------+
|    1.4142135623730951 |
+-----------------------+

mysql> SET @g1 = ST_GeomFromText('POINT(1 1)', 4326);
mysql> SET @g2 = ST_GeomFromText('POINT(2 2)', 4326);
mysql> SELECT ST_Distance(@g1, @g2);
+-----------------------+
| ST_Distance(@g1, @g2) |
+-----------------------+
|     156874.3859490455 |
+-----------------------+
mysql> SELECT ST_Distance(@g1, @g2, 'metre');
+--------------------------------+
| ST_Distance(@g1, @g2, 'metre') |
+--------------------------------+
|              156874.3859490455 |
+--------------------------------+
mysql> SELECT ST_Distance(@g1, @g2, 'foot');
+-------------------------------+
| ST_Distance(@g1, @g2, 'foot') |
+-------------------------------+
|             514679.7439273146 |
+-------------------------------+

对于在球体上计算距离的特殊情况, 请参阅 ST_Distance_Sphere() 函数。


228.ST_Distance_Sphere(g1, g2 [, radius])

返回球体之间或参数之间的最小球面距离(以米为单位)。(用于通用 距离计算,请参阅 ST_Distance() 函数。这 可选半径参数应为 以米为单位。

如果两个几何参数都是有效的笛卡尔参数或 SRID 0 中的值,则返回值为最短距离 在球体上的两个几何图形之间,提供 半径。如果省略,则默认半径为 6,370,986 米, 点 X 和 Y 坐标被解释为经度和 纬度,分别以度为单位。

如果两个几何参数都有效或在地理中的值 空间参考系统 (SRS),返回值为 球体上两个几何之间的最短距离 提供的半径。如果省略,则默认半径相等 平均半径,定义为 (2a+b)/3,其中 a 是 半长轴和 b 是 SRS 的半短轴。

ST_Distance_Sphere() 句柄 其参数如引言中所述 部分,但以下情况除外:

支持的几何参数组合是PointPoint 和 PointMulti、 或PointPointMultiPoint 和PointPointMulti(按任何参数顺序)。如果至少有一个几何形状 既不是也不是,并且其 SRID 为 0,则会发生ER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS错误。如果至少有一个几何既不是也不是,并且它的 SRID 引用 地理 SRS,发生ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误。如果任何几何图形引用投影的 SRS, 发生ER_NOT_IMPLEMENTED_FOR_PROJECTED_SRS错误。

如果任何参数的经度或纬度超出 范围,则发生错误:

如果经度值不在 (−180, 180],发生ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE错误 (ER_LONGITUDE_OUT_OF_RANGE在MySQL 8.0.12之前)。

如果纬度值不在 [−90, 90],发生ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE错误 (ER_LATITUDE_OUT_OF_RANGE MySQL 8.0.12 之前)。

显示的范围以度为单位。如果 SRS 使用其他设备, 该范围使用其单位中的相应值。这 由于浮点数,确切的范围限制略有偏差 算术。

如果半径参数为 存在但不为正,则发生ER_NONPOSITIVE_RADIUS错误。

如果距离超过双精度的范围 数字,则发生ER_STD_OVERFLOW_ERROR错误。

mysql> SET @pt1 = ST_GeomFromText('POINT(0 0)');
mysql> SET @pt2 = ST_GeomFromText('POINT(180 0)');
mysql> SELECT ST_Distance_Sphere(@pt1, @pt2);
+--------------------------------+
| ST_Distance_Sphere(@pt1, @pt2) |
+--------------------------------+
|             20015042.813723423 |
+--------------------------------+
ST_EndPoint(ls)

返回作为终结点的 值 ls。PointLineString

ST_EndPoint() 处理其 本节简介中所述的参数。

mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT ST_AsText(ST_EndPoint(ST_GeomFromText(@ls)));
+----------------------------------------------+
| ST_AsText(ST_EndPoint(ST_GeomFromText(@ls))) |
+----------------------------------------------+
| POINT(3 3)                                   |
+----------------------------------------------+


229.ST_Envelope(g)

返回 几何值 g。结果是 返回的值为 由边界框的角点定义:Polygon

POLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))

mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,2 2)')));
+----------------------------------------------------------------+
| ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,2 2)'))) |
+----------------------------------------------------------------+
| POLYGON((1 1,2 1,2 2,1 2,1 1))                                 |
+----------------------------------------------------------------+

如果参数是点、垂直线或水平线 段,ST_Envelope() 返回点或线段作为其 MBR 而不是 返回无效多边形:

mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,1 2)')));
+----------------------------------------------------------------+
| ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,1 2)'))) |
+----------------------------------------------------------------+
| LINESTRING(1 1,1 2)                                            |
+----------------------------------------------------------------+


230.ST_Equals(g1, g2)

返回 1 或 0 以指示 g1 在空间上是否等于 g2。

ST_Equals() 处理其 本节引言中所述的参数, 除了它不返回 空几何参数。NULL

mysql> SET @g1 = Point(1,1), @g2 = Point(2,2);
mysql> SELECT ST_Equals(@g1, @g1), ST_Equals(@g1, @g2);
+---------------------+---------------------+
| ST_Equals(@g1, @g1) | ST_Equals(@g1, @g2) |
+---------------------+---------------------+
|                   1 |                   0 |
+---------------------+---------------------+


231.ST_ExteriorRing(poly)

以 .PolygonLineString ST_ExteriorRing() 处理其 本节简介中所述的参数。

mysql> SET @poly =
       'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql> SELECT ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly)));
+----------------------------------------------------+
| ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly))) |
+----------------------------------------------------+
| LINESTRING(0 0,0 3,3 3,3 0,0 0)                    |
+----------------------------------------------------+


232.ST_InteriorRingN(poly, N)

返回第 N 个内环 对于值 poly 作为 .环以编号开头 与 1.PolygonLineString

ST_InteriorRingN() 句柄 其参数如引言中所述 部分。

mysql> SET @poly =
       'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql> SELECT ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1));
+-------------------------------------------------------+
| ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1)) |
+-------------------------------------------------------+
| LINESTRING(1 1,1 2,2 2,2 1,1 1)                       |
+-------------------------------------------------------+


233.ST_FrechetDistance(g1, g2 [, unit])

返回两个之间的离散弗雷谢距离 几何形状,反映几何形状的相似程度。这 结果是以长度测量的双精度数字 几何的空间参考系统 (SRS) 的单位 参数,或者单位参数的长度单位(如果该参数是 鉴于。

此函数实现离散弗雷谢距离, 这意味着它仅限于点之间的距离 的几何形状。例如,给定两个参数,只有点 考虑几何中明确提到的几何形状。 这些点之间的线段上的点不是 考虑。LineString

ST_FrechetDistance() 句柄 其几何参数如 简介中所述 本节,但以下情况除外:

几何可能具有笛卡尔或地理 SRS, 但只有值是 支持。如果参数位于同一笛卡尔或 地理 SRS,但不是 ,根据 SRS 类型,会发生ER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS或ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误。LineStringLineString

ST_FrechetDistance() 句柄 其可选单位参数为 本节简介中进行了介绍。

mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0,0 5,5 5)');
mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 1,0 6,3 3,5 6)');
mysql> SELECT ST_FrechetDistance(@ls1, @ls2);
+--------------------------------+
| ST_FrechetDistance(@ls1, @ls2) |
+--------------------------------+
|             2.8284271247461903 |
+--------------------------------+

mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0,0 5,5 5)', 4326);
mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 1,0 6,3 3,5 6)', 4326);
mysql> SELECT ST_FrechetDistance(@ls1, @ls2);
+--------------------------------+
| ST_FrechetDistance(@ls1, @ls2) |
+--------------------------------+
|              313421.1999416798 |
+--------------------------------+
mysql> SELECT ST_FrechetDistance(@ls1, @ls2, 'foot');
+----------------------------------------+
| ST_FrechetDistance(@ls1, @ls2, 'foot') |
+----------------------------------------+
|                     1028284.7767115477 |
+----------------------------------------+


此函数是在 MySQL 8.0.23 中添加的。
ST_GeoHash(经度、纬度、max_length)、ST_GeoHash(点、max_length)

返回连接字符集中的地理哈希字符串,并且 整理。

对于第一个语法,经度必须是 [−180, 180] 范围内的数字,纬度必须是 范围 [−90, 90]。对于第二种语法,需要一个值,其中 X 和 Y 坐标在经度和 纬度,分别。POINT

生成的字符串不超过 max_length 个字符,该字符具有 上限为 100。字符串可能短于 max_length 个字符,因为 创建 geohash 值的算法一直持续到它 创建了一个字符串,该字符串完全表示 位置或max_length字符,以先到者为准。

ST_GeoHash() 处理其 本节简介中所述的参数。

mysql> SELECT ST_GeoHash(180,0,10), ST_GeoHash(-180,-90,15);
+----------------------+-------------------------+
| ST_GeoHash(180,0,10) | ST_GeoHash(-180,-90,15) |
+----------------------+-------------------------+
| xbpbpbpbpb           | 000000000000000         |
+----------------------+-------------------------+


ST_GeomCollFromText(wkt [, srid [, options]]]), ST_GeometryCollectionFromText(wkt [, srid [, options]]]), ST_GeomCollFromTxt( wkt [, srid [, options]])

使用 构造值 其WKT代表和SRID。GeometryCollection

这些函数处理其参数,如 本节简介。

mysql> SET @g = "MULTILINESTRING((10 10, 11 11), (9 9, 10 10))";
mysql> SELECT ST_AsText(ST_GeomCollFromText(@g));
+--------------------------------------------+
| ST_AsText(ST_GeomCollFromText(@g))         |
+--------------------------------------------+
| MULTILINESTRING((10 10,11 11),(9 9,10 10)) |
+--------------------------------------------+


ST_GeomCollFromWKB(wkb [, srid [, options]]]), ST_GeometryCollectionFromWKB(wkb [, srid [, options]])

使用 构造值 其WKB代表和SRID。GeometryCollection

这些函数处理其参数,如 本节简介。
ST_GeometryN(gc, N)

返回值 gc 中的第 N 个几何图形。几何形状已编号 从 1 开始。GeometryCollection

ST_GeometryN() 处理其 本节简介中所述的参数。

mysql> SET @gc = 'GeometryCollection(Point(1 1),LineString(2 2, 3 3))';
mysql> SELECT ST_AsText(ST_GeometryN(ST_GeomFromText(@gc),1));
+-------------------------------------------------+
| ST_AsText(ST_GeometryN(ST_GeomFromText(@gc),1)) |
+-------------------------------------------------+
| POINT(1 1)                                      |
+-------------------------------------------------+


234.ST_GeometryType(g)

返回指示几何名称的二进制字符串 几何实例 G 所属的类型。名称 对应于可实例化的子类之一。Geometry

ST_GeometryType() 处理其 本节简介中所述的参数。

mysql> SELECT ST_GeometryType(ST_GeomFromText('POINT(1 1)'));
+------------------------------------------------+
| ST_GeometryType(ST_GeomFromText('POINT(1 1)')) |
+------------------------------------------------+
| POINT                                          |
+------------------------------------------------+

235.ST_GeomFromGeoJSON(str [, options [, srid]])

分析表示 GeoJSON 对象并返回几何图形。

如果任何参数为 ,则返回值 是。如果任何非参数无效,则会发生错误。NULLNULLNULL

选项(如果给定)描述了如何 处理包含几何图形的 GeoJSON 文档 坐标尺寸大于 2。下表显示 允许的选项值。

期权价值                        意义
1                                 拒绝文档并生成错误。如果未指定选项,则这是默认值。
2, 3, 4                          接受文档并去除坐标以获得更高的坐标 尺寸。
选项值为 2、3 和 4 目前产生相同的效果。如果几何形状 在 未来,您可以期望这些值产生不同的 影响。

如果给出 srid 论点,则必须 是 32 位无符号整数。如果未给出,则几何形状 返回值的 SRID 为 4326。

如果 srid 引用未定义的 空间参考系统 (SRS),则发生ER_SRS_NOT_FOUND错误。

对于地理 SRS 几何参数,如果任何参数具有 超出范围的经度或纬度,将发生错误:

如果经度值不在 (−180, 180],则发生ER_LONGITUDE_OUT_OF_RANGE错误。

如果纬度值不在 [−90, 90] 范围内, 发生ER_LATITUDE_OUT_OF_RANGE错误。

显示的范围以度为单位。如果 SRS 使用其他设备,则 范围使用其单位中的相应值。确切的 范围限制由于浮点而略有偏差 算术。

GeoJSON 几何、要素和要素集合对象可能 有属性。解析函数 解析 和 命名空间中名为 CRS URN,但不解析作为链接对象给出的 CRS。此外,被认可 作为 SRID 4326。如果对象具有不被理解的 CRS, 发生错误,但如果给出了可选的 srid 参数,则任何 CRS 都是 即使无效,也会忽略。crsurn:ogc:def:crs:EPSG::sridEPSG:sridurn:ogc:def:crs:OGC:1.3:CRS84

如果指定 SRID 的成员 与顶级对象不同,SRID 位于较低的位置 ,则发生ER_INVALID_GEOJSON_CRS_NOT_TOP_LEVEL错误。crs

如 GeoJSON 规范中所述,解析是 成员区分大小写 地理 JSON 输入(、 等)。这 规范对其他是否区分大小写保持沉默 解析,在 MySQL 中不区分大小写。typePointLineString

此示例显示了简单 GeoJSON 的解析结果 对象。观察坐标的顺序取决于 使用斯里德。

 
mysql> SET @json = '{ "type": "Point", "coordinates": [102.0, 0.0]}';
mysql> SELECT ST_AsText(ST_GeomFromGeoJSON(@json));
+--------------------------------------+
| ST_AsText(ST_GeomFromGeoJSON(@json)) |
+--------------------------------------+
| POINT(0 102)                         |
+--------------------------------------+
mysql> SELECT ST_SRID(ST_GeomFromGeoJSON(@json));
+------------------------------------+
| ST_SRID(ST_GeomFromGeoJSON(@json)) |
+------------------------------------+
|                               4326 |
+------------------------------------+
mysql> SELECT ST_AsText(ST_SRID(ST_GeomFromGeoJSON(@json),0));
+-------------------------------------------------+
| ST_AsText(ST_SRID(ST_GeomFromGeoJSON(@json),0)) |
+-------------------------------------------------+
| POINT(102 0)                                    |
+-------------------------------------------------+

ST_GeomFromText(wkt [, srid [, options]]]), ST_GeometryFromText(wkt [, srid [, options]])

使用其 WKT 构造任何类型的几何值 代表和 SRID。

这些函数处理其参数,如 本节简介。
ST_GeomFromWKB(wkb [, srid [, options]]]), ST_GeometryFromWKB(wkb [, srid [, options]])

使用其 WKB 构造任何类型的几何值 代表和 SRID。

这些函数处理其参数,如 本节简介。

236.ST_HausdorffDistance(g1, g2 [, unit])

返回两个之间的离散豪斯多夫距离 几何形状,反映几何形状的相似程度。这 结果是以长度测量的双精度数字 几何的空间参考系统 (SRS) 的单位 参数,或者单位参数的长度单位(如果该参数是 鉴于。

此函数实现离散豪斯多夫距离, 这意味着它仅限于点之间的距离 的几何形状。例如,给定两个参数,只有点 考虑几何中明确提到的几何形状。 这些点之间的线段上的点不是 考虑。LineString

ST_HausdorffDistance() 处理其几何参数,如 本节简介,但以下情况除外:

如果几何参数位于同一笛卡尔或 地理 SRS,但不在受支持的组合中, 发生ER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS或ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误,具体取决于 SRS 类型。支持组合使用。

LineString和LineString

Point和MultiPoint

LineString和MultiLineString

MultiPoint和MultiPoint

MultiLineString和MultiLineString

ST_HausdorffDistance() 处理其可选的 unit 参数,如本节简介中所述。

mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0,0 5,5 5)');
mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 1,0 6,3 3,5 6)');
mysql> SELECT ST_HausdorffDistance(@ls1, @ls2);
+----------------------------------+
| ST_HausdorffDistance(@ls1, @ls2) |
+----------------------------------+
|                                1 |
+----------------------------------+

mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0,0 5,5 5)', 4326);
mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 1,0 6,3 3,5 6)', 4326);
mysql> SELECT ST_HausdorffDistance(@ls1, @ls2);
+----------------------------------+
| ST_HausdorffDistance(@ls1, @ls2) |
+----------------------------------+
|               111319.49079326246 |
+----------------------------------+
mysql> SELECT ST_HausdorffDistance(@ls1, @ls2, 'foot');
+------------------------------------------+
| ST_HausdorffDistance(@ls1, @ls2, 'foot') |
+------------------------------------------+
|                        365221.4264870815 |
+------------------------------------------+

此函数是在 MySQL 8.0.23 中添加的。

237.ST_InteriorRingN(poly, N)

返回第 N 个内环 对于值 poly 作为 .环以编号开头 与 1.PolygonLineString

ST_InteriorRingN() 句柄 其参数如引言中所述 部分。

mysql> SET @poly =
       'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql> SELECT ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1));
+-------------------------------------------------------+
| ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1)) |
+-------------------------------------------------------+
| LINESTRING(1 1,1 2,2 2,2 1,1 1)                       |
+-------------------------------------------------------+

238.ST_Intersection(g1, g2)

返回表示点集交集的几何图形 几何值 g1 和 g2。结果在相同的 SRS 中 作为几何参数。

从MySQL 8.0.27开始,ST_Intersection()允许 笛卡尔或地理 SRS 中的参数。之前 MySQL 8.0.27,ST_Intersection()只允许笛卡尔SRS中的参数;对于参数 地理 SRS,发生ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误。

ST_Intersection() 处理其 本节简介中所述的参数。

mysql> SET @g1 = ST_GeomFromText('LineString(1 1, 3 3)');
mysql> SET @g2 = ST_GeomFromText('LineString(1 3, 3 1)');
mysql> SELECT ST_AsText(ST_Intersection(@g1, @g2));
+--------------------------------------+
| ST_AsText(ST_Intersection(@g1, @g2)) |
+--------------------------------------+
| POINT(2 2)                           |
+--------------------------------------+

239.ST_Intersects(g1, g2)

返回 1 或 0 以指示 g1 在空间上是否与 g2 相交。

ST_Intersects() 处理其 本节简介中所述的参数。

ST_IsClosed(ls)

对于值 ls,ST_IsClosed如果 ls 关闭(即其 ST_StartPoint() 和 ST_EndPoint() 值为 相同)。LineString

对于值 ls,如果 ls 关闭,则 ST_IsClosed() 返回 1(即,ST_StartPoint() 和 ST_EndPoint() 值为 LS中每个相同)。MultiLineStringLineString

如果 ls 未闭合,则 ST_IsClosed() 返回 0,如果 ls 为 。NULLNULL

ST_IsClosed() 处理其 本节引言中所述的参数, 但此例外:

如果几何具有地理的 SRID 值 空间参考系统 (SRS),则发生ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误。

mysql> SET @ls1 = 'LineString(1 1,2 2,3 3,2 2)';
mysql> SET @ls2 = 'LineString(1 1,2 2,3 3,1 1)';

mysql> SELECT ST_IsClosed(ST_GeomFromText(@ls1));
+------------------------------------+
| ST_IsClosed(ST_GeomFromText(@ls1)) |
+------------------------------------+
|                                  0 |
+------------------------------------+

mysql> SELECT ST_IsClosed(ST_GeomFromText(@ls2));
+------------------------------------+
| ST_IsClosed(ST_GeomFromText(@ls2)) |
+------------------------------------+
|                                  1 |
+------------------------------------+

mysql> SET @ls3 = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';

mysql> SELECT ST_IsClosed(ST_GeomFromText(@ls3));
+------------------------------------+
| ST_IsClosed(ST_GeomFromText(@ls3)) |
+------------------------------------+
|                                  0 |
+------------------------------------+

240.ST_IsEmpty(g)

此函数是一个占位符,返回 1 表示空 几何集合值或 0,否则。

唯一有效的空几何以 一个空的几何集合值。MySQL 不支持 地理信息系统值,例如 .EMPTYPOINT EMPTY

ST_IsEmpty() 处理其 本节简介中所述的参数。

241.ST_IsSimple(g)

如果几何值 g 根据 ISO SQL/MM 第 3 部分很简单,则返回 1: 空间标准。ST_IsSimple() 返回 0 如果 这个论点并不简单。

给出的可实例化几何类的描述 在第 11.4.2 节中,“OpenGIS 几何模型”包括 导致类实例 归类为不简单。

ST_IsSimple() 处理其 本节引言中所述的参数, 但此例外:

如果几何具有具有经度或 纬度超出范围,则发生错误:

如果经度值不在范围内 (−180, 180]),发生ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE错误 (ER_LONGITUDE_OUT_OF_RANGE在MySQL 8.0.12之前)。

如果纬度值不在 [−90, 90],发生ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE错误 (ER_LATITUDE_OUT_OF_RANGE MySQL 8.0.12 之前)。

显示的范围以度为单位。确切的范围限制 由于浮点运算而略有偏差。
ST_IsValid(g)

如果参数在几何上有效,则返回 1,如果 参数在几何上无效。几何有效性为 由 OGC 规范定义。

唯一有效的空几何图形以 空几何集合值。ST_IsValid() 在此返回 1 箱。MySQL 不支持 GIS 值,例如 .EMPTYPOINT EMPTY

ST_IsValid() 处理其 本节引言中所述的参数, 但此例外:

如果几何具有具有经度或 纬度超出范围,则发生错误:

如果经度值不在 (−180, 180],发生ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE错误 (ER_LONGITUDE_OUT_OF_RANGE在MySQL 8.0.12之前)。

如果纬度值不在 [−90, 90],发生ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE错误 (ER_LATITUDE_OUT_OF_RANGE MySQL 8.0.12 之前)。

显示的范围以度为单位。如果 SRS 使用其他设备, 该范围使用其单位中的相应值。这 由于浮点数,确切的范围限制略有偏差 算术。

mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0,-0.00 0,0.0 0)');
mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 0, 1 1)');
mysql> SELECT ST_IsValid(@ls1);
+------------------+
| ST_IsValid(@ls1) |
+------------------+
|                0 |
+------------------+
mysql> SELECT ST_IsValid(@ls2);
+------------------+
| ST_IsValid(@ls2) |
+------------------+
|                1 |
+------------------+


242.ST_LatFromGeoHash(geohash_str)

从地理哈希字符串值返回纬度,作为 [−90, 90] 范围内的双精度数。

ST_LatFromGeoHash() 解码函数从 geohash_str 参数中读取不超过 433 个字符。那 表示内部信息的上限 坐标值的表示形式。第433次过往的人物 被忽略,即使它们在其他方面是非法的并产生 错误。

ST_LatFromGeoHash() 处理其 本节简介中所述的参数。

mysql> SELECT ST_LatFromGeoHash(ST_GeoHash(45,-20,10));
+------------------------------------------+
| ST_LatFromGeoHash(ST_GeoHash(45,-20,10)) |
+------------------------------------------+
|                                      -20 |
+------------------------------------------+

243.ST_Latitude(p [, new_latitude_val])

使用表示具有地理空间参考系统 (SRS) 的有效对象 p 的单个参数,ST_Latitude() 返回 纬度值 p 作为 双精度数字。Point

可选的第二个参数表示有效的 纬度值,ST_Latitude() 返回一个类似于第一个的对象 纬度等于第二个参数的参数。Point

ST_Latitude() 处理其 本节引言中所述的参数, 此外,如果对象有效但没有地理 SRS,则ER_SRS_NOT_GEOGRAPHIC错误 发生。Point

mysql> SET @pt = ST_GeomFromText('POINT(45 90)', 4326);
mysql> SELECT ST_Latitude(@pt);
+------------------+
| ST_Latitude(@pt) |
+------------------+
|               45 |
+------------------+
mysql> SELECT ST_AsText(ST_Latitude(@pt, 10));
+---------------------------------+
| ST_AsText(ST_Latitude(@pt, 10)) |
+---------------------------------+
| POINT(10 90)                    |
+---------------------------------+


此函数是在 MySQL 8.0.12 中添加的。

244.ST_Length(ls [, unit])

返回一个双精度数字,指示长度 与其关联的空间中的 OR 值 ls 参考系统。值的长度等于总和 其元素的长度。

ST_Length() 计算结果 如下:

如果几何在笛卡尔 SRS 中有效,则返回值为笛卡尔 几何图形的长度。

如果几何在笛卡尔 SRS 中有效, 返回值是笛卡尔长度之和 它的元素。

如果几何在地理 SRS 中有效,则返回值为大地测量 SRS中几何形状的长度,以米为单位。

如果几何在地理 SRS 中有效, 返回值是 它的元素在那 SRS,以米为单位。

ST_Length() 处理其 本节引言中所述的参数, 但以下情况除外:

如果几何不是 or ,则返回值 是。LineStringMultiLineStringNULL

如果几何图形在几何上无效,则 结果是一个未定义的长度(也就是说,它可以是任何 数字),或发生错误。

如果长度计算结果为 +inf,则会发生ER_DATA_OUT_OF_RANGE错误。

如果几何具有具有经度或 纬度超出范围,则发生错误:

如果经度值不在范围内 (−180, 180]),发生ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE错误 (ER_LONGITUDE_OUT_OF_RANGE在MySQL 8.0.12之前)。

如果纬度值不在 [−90, 90],发生ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE错误 (ER_LATITUDE_OUT_OF_RANGE MySQL 8.0.12 之前)。

显示的范围以度为单位。确切的范围限制 由于浮点运算而略有偏差。

从 MySQL 8.0.16 开始,ST_Length() 允许 可选的单位参数 指定返回的长度值的线性单位。 这些规则适用于:

如果指定了单位但 MySQL 不支持,则ER_UNIT_NOT_FOUND错误 发生。

如果指定了支持的线性单位,并且 SRID 为 0,则发生ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT错误。

如果指定了支持的线性单位,并且 SRID 为 不是 0,结果在该单位中。

如果未指定单位,则结果以 几何的 SRS,无论是笛卡尔还是 地理学的。目前,所有 MySQL SRS 都表示为 米。

如果在ST_UNITS_OF_MEASURE表中找到单位,则支持该单位。请参见第 26.3.37 节 “INFORMATION_SCHEMA ST_UNITS_OF_MEASURE表”。INFORMATION_SCHEMA 

mysql> SET @ls = ST_GeomFromText('LineString(1 1,2 2,3 3)');
mysql> SELECT ST_Length(@ls);
+--------------------+
| ST_Length(@ls)     |
+--------------------+
| 2.8284271247461903 |
+--------------------+

mysql> SET @mls = ST_GeomFromText('MultiLineString((1 1,2 2,3 3),(4 4,5 5))');
mysql> SELECT ST_Length(@mls);
+-------------------+
| ST_Length(@mls)   |
+-------------------+
| 4.242640687119286 |
+-------------------+

mysql> SET @ls = ST_GeomFromText('LineString(1 1,2 2,3 3)', 4326);
mysql> SELECT ST_Length(@ls);
+-------------------+
| ST_Length(@ls)    |
+-------------------+
| 313701.9623204328 |
+-------------------+
mysql> SELECT ST_Length(@ls, 'metre');
+-------------------------+
| ST_Length(@ls, 'metre') |
+-------------------------+
|       313701.9623204328 |
+-------------------------+
mysql> SELECT ST_Length(@ls, 'foot');
+------------------------+
| ST_Length(@ls, 'foot') |
+------------------------+
|     1029205.9131247795 |
+------------------------+

245.ST_LineFromText(wkt [, srid [, options]]]), ST_LineStringFromText(wkt [, srid [, options]])

使用其 WKT 构造值 代表和 SRID。

这些函数处理其参数,如 本节简介。

246.ST_LineFromWKB(wkb [, srid [, options]]]), ST_LineStringFromWKB(wkb [, srid [, options]])

使用其 WKB 构造值 代表和 SRID。

这些函数处理其参数,如 本节简介。

247.ST_LineInterpolatePoint(ls, fractional_distance)

此函数采用几何图形 和 [0.0, 1.0] 范围内的分数距离并返回 沿着给定的分数 从起点到终点的距离。它可以使用 回答诸如几何学描述的道路中间的问题 论点。LineStringPointLineStringPoint

该函数适用于所有空间参考系统中的几何,包括笛卡尔 和地理。LineString

如果fractional_distance参数 是 1.0,结果可能不完全是论点的最后一点,而是接近它的点 由于近似值的数字不准确 计算。LineString

一个相关的函数,ST_LineInterpolatePoints(), 采用类似的参数,但返回沿距离每个分数的值组成的 从起点到终点。对于两者的示例 函数,请参阅 ST_LineInterpolatePoints() 说明。MultiPointPointLineString

ST_LineInterpolatePoint() 处理其参数,如 this简介中所述 部分,但以下情况除外:

如果几何参数不是 ,则会发生ER_UNEXPECTED_GEOMETRY_TYPE错误。LineString

如果分数距离参数超出范围 [0.0, 1.0],ER_DATA_OUT_OF_RANGE错误 发生。

ST_LineInterpolatePoint() 是一个 OpenGIS 的 MySQL 扩展。这个函数是在MySQL中添加的 8.0.24.

248.ST_LineInterpolatePoints(ls, fractional_distance)

此函数采用几何图形 和范围 (0.0, 1.0) 中的分数距离并返回 由起点组成,加上沿距离每个部分的值 从起点到终点。它可以用来回答 诸如哪些值是谎言之类的问题 沿着几何形状描述的道路每 10% 的路程 论点。LineStringMultiPointLineStringPointLineStringPoint

该函数适用于所有空间参考系统中的几何,包括笛卡尔 和地理。LineString

如果fractional_distance参数 将 1.0 除以零余数,结果可能不包含 论点的最后一点,但 由于数字不准确而靠近它的点 近似值计算。LineString

相关函数 ST_LineInterpolatePoint(), 采用类似的参数,但在给定的分数处返回沿 从起点到终点的距离。PointLineString

ST_LineInterpolatePoints() 处理其参数,如简介中所述 部分,但以下情况除外:

如果几何参数不是 ,则会发生ER_UNEXPECTED_GEOMETRY_TYPE错误。LineString

如果分数距离参数超出范围 [0.0, 1.0],ER_DATA_OUT_OF_RANGE错误 发生。

mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0,0 5,5 5)');
mysql> SELECT ST_AsText(ST_LineInterpolatePoint(@ls1, .5));
+----------------------------------------------+
| ST_AsText(ST_LineInterpolatePoint(@ls1, .5)) |
+----------------------------------------------+
| POINT(0 5)                                   |
+----------------------------------------------+
mysql> SELECT ST_AsText(ST_LineInterpolatePoint(@ls1, .75));
+-----------------------------------------------+
| ST_AsText(ST_LineInterpolatePoint(@ls1, .75)) |
+-----------------------------------------------+
| POINT(2.5 5)                                  |
+-----------------------------------------------+
mysql> SELECT ST_AsText(ST_LineInterpolatePoint(@ls1, 1));
+---------------------------------------------+
| ST_AsText(ST_LineInterpolatePoint(@ls1, 1)) |
+---------------------------------------------+
| POINT(5 5)                                  |
+---------------------------------------------+
mysql> SELECT ST_AsText(ST_LineInterpolatePoints(@ls1, .25));
+------------------------------------------------+
| ST_AsText(ST_LineInterpolatePoints(@ls1, .25)) |
+------------------------------------------------+
| MULTIPOINT((0 2.5),(0 5),(2.5 5),(5 5))        |
+------------------------------------------------+


ST_LineInterpolatePoints() 是一个 OpenGIS 的 MySQL 扩展。这个函数是在MySQL中添加的 8.0.24.

249.ST_LongFromGeoHash(geohash_str)

从地理哈希字符串值返回经度,作为 [−180, 180] 范围内的双精度数。

ST_LatFromGeoHash() 描述中的备注关于 从 geohash_str 参数处理的最大字符数也适用于 ST_LongFromGeoHash()。

ST_LongFromGeoHash() 句柄 其参数如引言中所述 部分。

mysql> SELECT ST_LongFromGeoHash(ST_GeoHash(45,-20,10));
+-------------------------------------------+
| ST_LongFromGeoHash(ST_GeoHash(45,-20,10)) |
+-------------------------------------------+
|                                        45 |
+-------------------------------------------+

250.ST_Longitude(p [, new_longitude_val])

使用表示具有地理空间参考系统 (SRS) 的有效对象 p 的单个参数,ST_Longitude() 返回 P的经度值作为 双精度数字。Point

可选的第二个参数表示有效的 经度值,ST_Longitude() 返回一个对象,类似于第一个参数 它的经度等于第二个参数。Point

ST_Longitude() 处理其 本节引言中所述的参数, 此外,如果对象有效但没有地理 SRS,则ER_SRS_NOT_GEOGRAPHIC错误 发生。Point

mysql> SET @pt = ST_GeomFromText('POINT(45 90)', 4326);
mysql> SELECT ST_Longitude(@pt);
+-------------------+
| ST_Longitude(@pt) |
+-------------------+
|                90 |
+-------------------+
mysql> SELECT ST_AsText(ST_Longitude(@pt, 10));
+----------------------------------+
| ST_AsText(ST_Longitude(@pt, 10)) |
+----------------------------------+
| POINT(45 10)                     |
+----------------------------------+

此函数是在 MySQL 8.0.12 中添加的。

251.ST_MakeEnvelope(pt1, pt2)

返回在两个周围形成封套的矩形 

使用笛卡尔坐标系进行计算 而不是在球体、球体或地球上。

给定两个点 pt1 和 pt2,ST_MakeEnvelope() 创建 在抽象平面上的结果几何图形,如下所示:

如果 pt1 和 pt2 相等,则结果为 点 pt1。

否则,如果是垂直或 水平线段,结果就是线段。(pt1, pt2)(pt1, pt2)

否则,结果是使用 pt1 和 pt2 作为对角线点的面。

结果几何的 SRID 为 0。

ST_MakeEnvelope() 处理其 本节引言中所述的参数, 但以下情况除外:

如果参数不是值, 发生ER_WRONG_ARGUMENTS错误。Point

对于任何ER_GIS_INVALID_DATA 两点的坐标值为无限或 。NaN

如果任何几何具有地理空间的 SRID 值 参考系统 (SRS),则发生ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误。

mysql> SET @pt1 = ST_GeomFromText('POINT(0 0)');
mysql> SET @pt2 = ST_GeomFromText('POINT(1 1)');
mysql> SELECT ST_AsText(ST_MakeEnvelope(@pt1, @pt2));
+----------------------------------------+
| ST_AsText(ST_MakeEnvelope(@pt1, @pt2)) |
+----------------------------------------+
| POLYGON((0 0,1 0,1 1,0 1,0 0))         |
+----------------------------------------+

252.ST_MLineFromText(wkt [, srid [, options]]]), ST_MultiLineStringFromText(wkt [, srid [, options]])

使用 构造值 其WKT代表和SRID。

253.ST_MLineFromWKB(wkb [, srid [, options]]]), ST_MultiLineStringFromWKB(wkb [, srid [, options]])

使用 构造值 其WKB代表和SRID。

253.ST_LineFromWKB(wkb [, srid [, options]]]), ST_LineStringFromWKB(wkb [, srid [, options]])

使用其 WKB 构造值 代表和 SRID。

254.ST_MPointFromWKB(wkb [, srid [, options]]]), ST_MultiPointFromWKB(wkb [, srid [, options]])

使用其 WKB 构造值 代表和 SRID。

255.ST_MPolyFromWKB(wkb [, srid [, options]]]), ST_MultiPolygonFromWKB(wkb [, srid [, options]])

使用其构造值 WKB代表和SRID。

256.ST_NumGeometries(gc)

返回值 gc 中的几何数。

ST_NumGeometries() 句柄 其参数如引言中所述 部分。

mysql> SET @gc = 'GeometryCollection(Point(1 1),LineString(2 2, 3 3))';
mysql> SELECT ST_NumGeometries(ST_GeomFromText(@gc));
+----------------------------------------+
| ST_NumGeometries(ST_GeomFromText(@gc)) |
+----------------------------------------+
|                                      2 |
+----------------------------------------+

257.ST_NumInteriorRing(), ST_NumInteriorRings()

返回值多边形中的内环数。

ST_NumInteriorRing() 和 ST_NuminteriorRings() 按照简介中所述处理它们的参数 本节。

mysql> SET @poly =
       'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql> SELECT ST_NumInteriorRings(ST_GeomFromText(@poly));
+---------------------------------------------+
| ST_NumInteriorRings(ST_GeomFromText(@poly)) |
+---------------------------------------------+
|                                           1 |
+---------------------------------------------+

258.ST_NumPoints(ls)

返回 中的对象数 值 ls。

ST_NumPoints() 处理其 本节简介中所述的参数。

mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT ST_NumPoints(ST_GeomFromText(@ls));
+------------------------------------+
| ST_NumPoints(ST_GeomFromText(@ls)) |
+------------------------------------+
|                                  3 |
+------------------------------------+

259.ST_Overlaps(g1, g2)

两个几何在空间上重叠,如果 它们相交,它们的相交产生几何图形 具有相同的维度,但不等于给定的任何一个 几何。

此函数返回 1 或 0 以指示 g1 在空间上是否与 g2 重叠。

ST_Overlaps() 处理其 本节简介中所述的参数 除了返回值为 附加条件即两者的尺寸 几何形状不相等。NULL

260.ST_PointAtDistance(ls, distance)

此函数采用几何图形 和 [0.0, ST_Length(ls)] 范围内的距离 以空间参考系统 (SRS) 的单位测量 ,并返回从其起点开始的沿该距离 点。它可用于回答诸如哪个值是从 400 米开始的问题 几何参数描述的道路。LineStringLineStringPointLineStringPoint

该函数适用于所有空间参考系统中的几何,包括笛卡尔 和地理。LineString

ST_PointAtDistance() 句柄 其参数如引言中所述 部分,但以下情况除外:

如果几何参数不是 ,则会发生ER_UNEXPECTED_GEOMETRY_TYPE错误。LineString

如果分数距离参数超出范围 [0.0, ST_Length(ls)], 发生ER_DATA_OUT_OF_RANGE错误。

ST_PointAtDistance() 是一个 MySQL 扩展至 OpenGIS。此函数是在MySQL 8.0.24中添加的。

ST_PointFromGeoHash(geohash_str, srid)

返回一个包含 解码的地理哈希值,给定一个地理哈希字符串值。POINT

点的 X 和 Y 坐标是 范围 [−180, 180] 和范围内的纬度 [−90, 90],分别。

srid 参数是 32 位 无符号整数。

ST_LatFromGeoHash() 描述中的备注关于 从 geohash_str 参数处理的最大字符数也适用于 ST_PointFromGeoHash()。

ST_PointFromGeoHash() 句柄 其参数如引言中所述 部分。

mysql> SET @gh = ST_GeoHash(45,-20,10);
mysql> SELECT ST_AsText(ST_PointFromGeoHash(@gh,0));
+---------------------------------------+
| ST_AsText(ST_PointFromGeoHash(@gh,0)) |
+---------------------------------------+
| POINT(45 -20)                         |
+---------------------------------------+

261.ST_PointFromText(wkt [, srid [, options]])

使用其 WKT 构造值 代表和 SRID。Point

ST_PointFromText() 处理其 本节简介中所述的参数。

262.ST_PointFromWKB(wkb [, srid [, options]])

使用其 WKB 构造值 代表和 SRID。Point

ST_PointFromWKB() 处理其 本节简介中所述的参数。

263.ST_PointN(ls, N)

返回值 ls 中的第 N 个。点以编号开头 与 1.PointLinestring

ST_PointN() 处理其 本节简介中所述的参数。

mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT ST_AsText(ST_PointN(ST_GeomFromText(@ls),2));
+----------------------------------------------+
| ST_AsText(ST_PointN(ST_GeomFromText(@ls),2)) |
+----------------------------------------------+
| POINT(2 2)                                   |
+----------------------------------------------+

264.ST_PolyFromText(wkt [, srid [, options]]]), ST_PolygonFromText(wkt [, srid [, options]])

使用其 WKT 构造值 代表和 SRID。

这些函数处理其参数,如 本节简介。

265.ST_PolyFromWKB(wkb [, srid [, options]]]), ST_PolygonFromWKB(wkb [, srid [, options]])

使用其 WKB 构造值 代表和 SRID。

这些函数处理其参数,如 本节简介。

266.ST_Simplify(g, max_distance)

使用道格拉斯-皮克算法简化几何图形,并且 返回相同类型的简化值。

几何可以是任何几何类型,尽管 Douglas-Peucker算法实际上可能不会处理每种类型。 几何集合通过为其组件提供来处理 一个接一个地简化算法,并返回 因此,几何图形被放入几何集合中。

max_distance参数是 顶点到的距离(以输入坐标为单位) 要删除的其他段。此距离内的顶点 简化的线串将被删除。

根据Boost.Geometry,几何图形可能会变得无效 由于简化过程,以及过程 可能会创建自交叉点。要检查 结果,将其传递给 ST_IsValid()。

ST_Simplify() 处理其 本节引言中所述的参数, 但此例外:

如果max_distance参数是 NaN,或者是 ER_WRONG_ARGUMENTS错误 发生。

mysql> SET @g = ST_GeomFromText('LINESTRING(0 0,0 1,1 1,1 2,2 2,2 3,3 3)');
mysql> SELECT ST_AsText(ST_Simplify(@g, 0.5));
+---------------------------------+
| ST_AsText(ST_Simplify(@g, 0.5)) |
+---------------------------------+
| LINESTRING(0 0,0 1,1 1,2 3,3 3) |
+---------------------------------+
mysql> SELECT ST_AsText(ST_Simplify(@g, 1.0));
+---------------------------------+
| ST_AsText(ST_Simplify(@g, 1.0)) |
+---------------------------------+
| LINESTRING(0 0,3 3)             |
+---------------------------------+

267.ST_SRID(g [, srid])

使用表示有效几何对象 g 的单个参数,ST_SRID() 返回一个整数 指示空间参考系统 (SRS) 的 ID 与 G 相关。

可选的第二个参数表示有效的 SRID 值, ST_SRID() 返回一个 与具有 SRID 的第一个参数类型相同的对象 值等于第二个参数。这仅设置 SRID 对象的值;它不执行任何转换 的坐标值。

ST_SRID() 处理其 本节引言中所述的参数, 但此例外:

对于单参数语法,ST_SRID() 返回 几何 SRID 即使它引用未定义的 SRS。ER_SRS_NOT_FOUND错误 不会发生。

ST_SRID(g, target_srid) 和 ST_Transform(g, target_srid) 的不同之处为 遵循:

ST_SRID() 更改 几何 SRID 值而不变换其 坐标。

ST_Transform() 变换 几何坐标除了更改其 SRID 值。

mysql> SET @g = ST_GeomFromText('LineString(1 1,2 2)', 0);
mysql> SELECT ST_SRID(@g);
+-------------+
| ST_SRID(@g) |
+-------------+
|           0 |
+-------------+
mysql> SET @g = ST_SRID(@g, 4326);
mysql> SELECT ST_SRID(@g);
+-------------+
| ST_SRID(@g) |
+-------------+
|        4326 |
+-------------+


可以在特定的 SRID 中创建几何图形: 传递给 ST_SRID() 用于创建的特定于 MySQL 的函数之一的结果 空间值以及 SRID 值。例如:

SET @g1 = ST_SRID(Point(1, 1), 4326);
但是,该方法在 SRID 0 中创建几何图形,然后 将其转换为 SRID 4326 (WGS 84)。一个更好的选择是 使用正确的空间参考创建几何 系统开始。例如:

SET @g1 = ST_PointFromText('POINT(1 1)', 4326);
SET @g1 = ST_GeomFromText('POINT(1 1)', 4326);
ST_SRID() 的双参数形式对任务很有用 例如校正或更改几何形状的 SRS,例如 具有不正确的 SRID。

268.ST_StartPoint(ls)

返回作为起点的 的值 ls。PointLineString

ST_StartPoint() 处理其 本节简介中所述的参数。

mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT ST_AsText(ST_StartPoint(ST_GeomFromText(@ls)));
+------------------------------------------------+
| ST_AsText(ST_StartPoint(ST_GeomFromText(@ls))) |
+------------------------------------------------+
| POINT(1 1)                                     |
+------------------------------------------------+

269.ST_SwapXY(g)

接受内部几何格式的参数,交换 X 和几何图形中每个坐标对的 Y 值,以及 返回结果。

ST_SwapXY() 处理其 本节简介中所述的参数。

mysql> SET @g = ST_LineFromText('LINESTRING(0 5,5 10,10 15)');
mysql> SELECT ST_AsText(@g);
+----------------------------+
| ST_AsText(@g)              |
+----------------------------+
| LINESTRING(0 5,5 10,10 15) |
+----------------------------+
mysql> SELECT ST_AsText(ST_SwapXY(@g));
+----------------------------+
| ST_AsText(ST_SwapXY(@g))   |
+----------------------------+
| LINESTRING(5 0,10 5,15 10) |
+----------------------------+

270.ST_SymDifference(g1, g2)

返回表示对称点集的几何图形 几何值 g1 和 g2 的差异,定义为:

g1 symdifference g2 := (g1 union g2) difference (g1 intersection g2)
或者,在函数调用表示法中:

ST_SymDifference(g1, g2) = ST_Difference(ST_Union(g1, g2), ST_Intersection(g1, g2))
结果与几何参数位于相同的 SRS 中。

从MySQL 8.0.27开始,ST_SymDifference()允许 笛卡尔或地理 SRS 中的参数。之前 MySQL 8.0.27, ST_SymDifference() 许可证 仅在笛卡尔 SRS 中的参数;对于参数 地理 SRS,发生ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误。

ST_SymDifference() 处理其 本节简介中所述的参数。

mysql> SET @g1 = ST_GeomFromText('MULTIPOINT(5 0,15 10,15 25)');
mysql> SET @g2 = ST_GeomFromText('MULTIPOINT(1 1,15 10,15 25)');
mysql> SELECT ST_AsText(ST_SymDifference(@g1, @g2));
+---------------------------------------+
| ST_AsText(ST_SymDifference(@g1, @g2)) |
+---------------------------------------+
| MULTIPOINT((1 1),(5 0))               |
+---------------------------------------+

271.ST_Touches(g1, g2)

两个几何形状在空间上接触,如果它们的 内部不相交,但其中一个的边界 几何图形与 的边界或内部相交 另一个。

此函数返回 1 或 0 以指示 g1 在空间上是否接触 g2。

ST_Touches() 处理其 本节简介中所述的参数 除了返回值为 两个几何形状的附加条件 维度 0( 或 )。NULLPointMultiPoint

272.ST_Transform(g, target_srid)

从一个空间参考系统 (SRS) 变换几何 到另一个。返回值是与 所有坐标都转换为 目标 SRID,target_srid。 转换支持仅限于地理 SRS,除非 几何参数的 SRID 与目标相同 SRID 值,在这种情况下,返回值是输入 任何有效 SRS 的几何图形。

在 MySQL 8.0.30 之前,此函数不支持 从 MySQL 8.0.30 开始,支持 为流行的可视化伪墨卡托 (EPSG) 提供 1024)投影法,用于WGS 84伪墨卡托(SRID 3857).

ST_Transform() 处理其 本节引言中所述的参数, 但以下情况除外:

具有 SRID 值的几何参数 地理 SRS 不会产生错误。

如果几何或目标 SRID 参数具有 SRID 值 指未定义的空间参考系统 (SRS),则发生ER_SRS_NOT_FOUND错误。

如果几何图形位于 SRS 中,则 ST_Transform() 不能 转换自,则发生ER_TRANSFORM_SOURCE_SRS_NOT_SUPPORTED错误。

如果目标 SRID 位于 ST_Transform() 无法 转换为,则发生ER_TRANSFORM_TARGET_SRS_NOT_SUPPORTED错误。

如果几何图形位于不是 WGS 84 且没有 TOWGS84 子句,则发生ER_TRANSFORM_SOURCE_SRS_MISSING_TOWGS84错误。

如果目标 SRID 位于不是 WGS 84 的 SRS 中,并且具有 如果没有 TOWGS84 子句,则会发生ER_TRANSFORM_TARGET_SRS_MISSING_TOWGS84错误。

ST_SRID(g, target_srid) 和 ST_Transform(g, target_srid) 的不同之处为 遵循:

ST_SRID() 更改 几何 SRID 值而不变换其坐标。

ST_Transform() 变换 几何坐标除了更改其 SRID 价值。

mysql> SET @p = ST_GeomFromText('POINT(52.381389 13.064444)', 4326);
mysql> SELECT ST_AsText(@p);
+----------------------------+
| ST_AsText(@p)              |
+----------------------------+
| POINT(52.381389 13.064444) |
+----------------------------+
mysql> SET @p = ST_Transform(@p, 4230);
mysql> SELECT ST_AsText(@p);
+---------------------------------------------+
| ST_AsText(@p)                               |
+---------------------------------------------+
| POINT(52.38208611407426 13.065520672345304) |
+---------------------------------------------+

273.ST_Union(g1, g2)

返回一个几何图形,该几何图形表示 几何值 g1 和 g2。结果在相同的 SRS 中 作为几何参数。

从MySQL 8.0.26开始,ST_Union()允许在笛卡尔或地理SRS中参数。 在 MySQL 8.0.26 之前,ST_Union() 允许在 a 仅笛卡尔SRS;对于地理 SRS 中的参数,会发生ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误。

ST_Union() 处理其 本节简介中所述的参数。

mysql> SET @g1 = ST_GeomFromText('LineString(1 1, 3 3)');
mysql> SET @g2 = ST_GeomFromText('LineString(1 3, 3 1)');
mysql> SELECT ST_AsText(ST_Union(@g1, @g2));
+--------------------------------------+
| ST_AsText(ST_Union(@g1, @g2))        |
+--------------------------------------+
| MULTILINESTRING((1 1,3 3),(1 3,3 1)) |
+--------------------------------------+

274.ST_Validate(g)

根据 OGC 规范验证几何图形。一个 几何图形的语法格式可以很好(WKB 值加上 SRID),但在几何上无效。例如,此多边形是 几何上无效:POLYGON((0 0, 0 0, 0 0, 0 0, 0 0))

ST_Validate() 返回 几何图形,如果它在语法上格式良好并且 几何上有效,如果参数 语法格式不正确或几何上无效 或者是 。NULLNULL

ST_Validate() 可用于 过滤掉无效的几何数据,尽管需要付出代价。为 需要更精确结果且不受污染的应用 无效数据,这种惩罚可能是值得的。

如果几何参数有效,则按原样返回, 除了如果输入或有顺时针响铃,那些 在检查有效性之前,环被反转。如果 几何形状有效,反转环的值为 返回。PolygonMultiPolygon

唯一有效的空几何图形以 空几何集合值。ST_Validate() 返回它 在这种情况下,无需进一步检查即可直接进行。

从 MySQL 8.0.13 开始,ST_Validate() 处理其 本节引言中所述的参数, 但以下情况除外:

如果几何具有具有经度或 纬度超出范围,则发生错误:

如果经度值不在 (−180, 180],发生ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE错误 (ER_LONGITUDE_OUT_OF_RANGE在MySQL 8.0.12之前)。

如果纬度值不在 [−90, 90],发生ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE错误 (ER_LATITUDE_OUT_OF_RANGE MySQL 8.0.12 之前)。

显示的范围以度为单位。确切的范围限制 由于浮点运算而略有偏差。

在 MySQL 8.0.13 之前,ST_Validate() 处理其 本节引言中所述的参数, 但以下情况除外:

如果几何图形的语法格式不正确,则 返回值为 。ER_GIS_INVALID_DATA错误 不会发生。NULL

如果几何具有地理空间的 SRID 值 参考系统 (SRS),则发生ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS错误。

mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0)');
mysql> SET @ls2 = ST_GeomFromText('LINESTRING(0 0, 1 1)');
mysql> SELECT ST_AsText(ST_Validate(@ls1));
+------------------------------+
| ST_AsText(ST_Validate(@ls1)) |
+------------------------------+
| NULL                         |
+------------------------------+
mysql> SELECT ST_AsText(ST_Validate(@ls2));
+------------------------------+
| ST_AsText(ST_Validate(@ls2)) |
+------------------------------+
| LINESTRING(0 0,1 1)          |
+------------------------------+

275.ST_Within(g1, g2)

返回 1 或 0 以指示 g1 在空间上是否在 g2 内。这测试相反 关系作为ST_Contains()。

ST_Within() 处理其 本节简介中所述的参数。

276.ST_X(p [, new_x_val])

使用表示有效对象 p 的单个参数,ST_X() 返回 p 的 X 坐标值作为 双精度数字。从MySQL 8.0.12开始,X 坐标被视为指出现的轴 空间参考中的第一个 系统 (SRS) 定义。PointPoint

使用可选的第二个参数,ST_X() 返回一个类似于第一个参数的对象,其中 它的 X 坐标等于第二个参数。截至 MySQL 8.0.12,如果对象具有 地理SRS,第二个参数必须在适当的 经度或纬度值的范围。PointPoint

ST_X() 处理其参数 如本节简介中所述。

mysql> SELECT ST_X(Point(56.7, 53.34));
+--------------------------+
| ST_X(Point(56.7, 53.34)) |
+--------------------------+
|                     56.7 |
+--------------------------+
mysql> SELECT ST_AsText(ST_X(Point(56.7, 53.34), 10.5));
+-------------------------------------------+
| ST_AsText(ST_X(Point(56.7, 53.34), 10.5)) |
+-------------------------------------------+
| POINT(10.5 53.34)                         |
+-------------------------------------------+


277.ST_Y(p [, new_y_val])

使用表示有效对象 p 的单个参数,ST_Y() 返回 p 的 Y 坐标值作为 双精度数字。从MySQL 8.0.12开始,Y 坐标被视为指出现的轴 空间参考中的第二个 系统 (SRS) 定义。PointPoint

使用可选的第二个参数,ST_Y() 返回一个对象,类似于第一个参数 它的 Y 坐标等于第二个参数。截至 MySQL 8.0.12,如果对象具有 地理SRS,第二个参数必须在适当的 经度或纬度值的范围。PointPoint

ST_Y() 处理其参数 如本节简介中所述。

mysql> SELECT ST_Y(Point(56.7, 53.34));
+--------------------------+
| ST_Y(Point(56.7, 53.34)) |
+--------------------------+
|                    53.34 |
+--------------------------+
mysql> SELECT ST_AsText(ST_Y(Point(56.7, 53.34), 10.5));
+-------------------------------------------+
| ST_AsText(ST_Y(Point(56.7, 53.34), 10.5)) |
+-------------------------------------------+
| POINT(56.7 10.5)                          |
+-------------------------------------------+

278.STATEMENT_DIGEST(statement)

给定一个字符串形式的 SQL 语句,返回该语句 将哈希值摘要为连接字符集中的字符串, 或者如果参数是 .相关的 STATEMENT_DIGEST_TEXT() 函数返回规范化语句摘要。为 有关语句摘要的信息,请参见第 27.10 节 “性能架构语句摘要和采样”。NULLNULL

这两个函数都使用 MySQL 解析器来解析语句。如果 解析失败,发生错误。错误消息包括 仅当语句作为文本提供时才解析错误 字符串。

max_digest_length系统 变量确定可用于的最大字节数 这些函数用于计算规范化语句摘要。

mysql> SET @stmt = 'SELECT * FROM mytable WHERE cola = 10 AND colb = 20';
mysql> SELECT STATEMENT_DIGEST(@stmt);
+------------------------------------------------------------------+
| STATEMENT_DIGEST(@stmt)                                          |
+------------------------------------------------------------------+
| 3bb95eeade896657c4526e74ff2a2862039d0a0fe8a9e7155b5fe492cbd78387 |
+------------------------------------------------------------------+
mysql> SELECT STATEMENT_DIGEST_TEXT(@stmt);
+----------------------------------------------------------+
| STATEMENT_DIGEST_TEXT(@stmt)                             |
+----------------------------------------------------------+
| SELECT * FROM `mytable` WHERE `cola` = ? AND `colb` = ?  |
+----------------------------------------------------------+


279.STATEMENT_DIGEST_TEXT(statement)

给定一个字符串形式的 SQL 语句,返回规范化的 语句摘要为连接字符集中的字符串, 或者如果参数是NULL 结果为null。

280.STD(expr) [over_clause]

返回 expr 的总体标准差。STD() 是 标准 SQL 函数 STDDEV_POP(),作为 MySQL 扩展。

如果没有匹配的行,或者 expr 为NULL ,则 STD() 返回NULL 。

如果存在over_clause则此函数作为窗口函数执行。over_clause如第 12.21.2 节 “窗口函数概念和语法”中所述。

281.STDDEV(expr) [over_clause]

返回 expr 的总体标准差。STDDEV() 是 标准 SQL 函数 STDDEV_POP(),提供 与甲骨文的兼容性。

如果没有匹配的行,或者 expr 为NULL ,则 STDDEV() 返回 NULL。

如果存在over_clause则此函数作为窗口函数执行。over_clause如第 12.21.2 节 “窗口函数概念和语法”中所述。

282.STDDEV_POP(expr) [over_clause]

返回 expr 的总体标准差(VAR_POP() 的平方根)。你也可以使用 STD() 或 STDDEV(),它们是 等效但不是标准 SQL。

如果没有匹配的行,或者 expr 为 NULL,则返回 STDDEV_POP() 返回 NULL。

如果存在over_clause则此函数作为窗口函数执行。over_clause如第 12.21.2 节 “窗口函数概念和语法”中所述。

283.STDDEV_SAMP(expr) [over_clause]

返回 expr 的样本标准差(VAR_SAMP() 的平方根)。

如果没有匹配的行,或者 expr 为 NULL,则返回 STDDEV_SAMP() 返回NULL 。

如果存在over_clause则此函数作为窗口函数执行。over_clause如第 12.21.2 节 “窗口函数概念和语法”中所述。

284.STRCMP(expr1,expr2)

如果字符串相同,则返回 STRCMP() 如果第一个参数小于 第二个根据当前排序顺序,如果任一参数为 。否则返回。0-1NULLNULL1

mysql> SELECT STRCMP('text', 'text2');
        -> -1
mysql> SELECT STRCMP('text2', 'text');
        -> 1
mysql> SELECT STRCMP('text', 'text');
        -> 0


STRCMP() 执行 使用参数的排序规则进行比较。

mysql> SET @s1 = _utf8mb4 'x' COLLATE utf8mb4_0900_ai_ci;
mysql> SET @s2 = _utf8mb4 'X' COLLATE utf8mb4_0900_ai_ci;
mysql> SET @s3 = _utf8mb4 'x' COLLATE utf8mb4_0900_as_cs;
mysql> SET @s4 = _utf8mb4 'X' COLLATE utf8mb4_0900_as_cs;
mysql> SELECT STRCMP(@s1, @s2), STRCMP(@s3, @s4);
+------------------+------------------+
| STRCMP(@s1, @s2) | STRCMP(@s3, @s4) |
+------------------+------------------+
|                0 |               -1 |
+------------------+------------------+


如果排序规则不兼容,则参数之一 必须转换为与其他兼容。请参见第 10.8.4 节 “表达式中的排序规则强制性”。

mysql> SET @s1 = _utf8mb4 'x' COLLATE utf8mb4_0900_ai_ci;
mysql> SET @s2 = _utf8mb4 'X' COLLATE utf8mb4_0900_ai_ci;
mysql> SET @s3 = _utf8mb4 'x' COLLATE utf8mb4_0900_as_cs;
mysql> SET @s4 = _utf8mb4 'X' COLLATE utf8mb4_0900_as_cs;
-->
mysql> SELECT STRCMP(@s1, @s3);
ERROR 1267 (HY000): Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT)
and (utf8mb4_0900_as_cs,IMPLICIT) for operation 'strcmp'
mysql> SELECT STRCMP(@s1, @s3 COLLATE utf8mb4_0900_ai_ci);
+---------------------------------------------+
| STRCMP(@s1, @s3 COLLATE utf8mb4_0900_ai_ci) |
+---------------------------------------------+
|                                           0 |
+---------------------------------------------+

285.SUBDATE()


当以 第二个参数INTERVALINTERVAL,SUBDATE() 是一个 DATE_SUB() 的同义词。为 有关单位参数的信息。

mysql> SELECT DATE_SUB('2008-01-02', INTERVAL 31 DAY);
        -> '2007-12-02'
mysql> SELECT SUBDATE('2008-01-02', INTERVAL 31 DAY);
        -> '2007-12-02'


第二种形式允许使用整数值表示天。在这种情况下,它是 解释为要从 日期或日期时间表达式表达式 expr。

mysql> SELECT SUBDATE('2008-01-02 12:00:00', 31);
        -> '2007-12-02 12:00:00'


此函数返回NULL,如果其任何 参数是NULL 。


286.SUBSTR(str,pos), SUBSTR(str FROM pos), SUBSTR(str,pos,len), SUBSTR(str FROM POS FOR len)

SUBSTR() 是 SUBSTRING() 的同义词。

287.SUBSTRING(str,pos), SUBSTRING(str FROM POS), SUBSTRING(str,pos,len), SUBSTRING(str FROM POS FOR len)

没有 len 参数的形式 从字符串 str 返回从位置 POS 开始的子字符串。表格 使用 len 参数返回 子字符串 len 字符长自 字符串 str,从位置位置开始。使用的形式是标准的 SQL 语法。它也是 可以为 POS 使用负值。在这种情况下,开始 子字符串是 POS 字符 从字符串的末尾开始,而不是从开头开始。一个 负值可用于此函数的任何形式的 POS。对于 pos 的值为 0 将返回一个空字符串。FROM

对于所有形式的 SUBSTRING(), 字符串中第一个字符的位置,其中 要提取的子字符串算作 。1

mysql> SELECT SUBSTRING('Quadratically',5);
        -> 'ratically'
mysql> SELECT SUBSTRING('foobarbar' FROM 4);
        -> 'barbar'
mysql> SELECT SUBSTRING('Quadratically',5,6);
        -> 'ratica'
mysql> SELECT SUBSTRING('Sakila', -3);
        -> 'ila'
mysql> SELECT SUBSTRING('Sakila', -5, 3);
        -> 'aki'
mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);
        -> 'ki'


此函数是多字节安全的。如果它的任何参数是NULL ,则返回NULL 。

如果 len 小于 1,则结果 是空字符串。

288.SUBSTRING_INDEX(str,delim,count)

在分隔符 delim 出现计数之前从字符串 str 返回子字符串。如果计数为正数,则所有内容 最终分隔符的左侧(从左侧计数)为 返回。如果计数为负数, 最终分隔符右侧的所有内容(从 右)被返回。SUBSTRING_INDEX() 执行 搜索 Delim 时区分大小写的匹配。

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
        -> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
        -> 'mysql.com'


此函数是多字节安全的。

SUBSTRING_INDEX()如果其任何参数为NULL 则结果为NULL。

SUBTIME(expr1,expr2)

SUBTIME() 返回 expr1 − expr2 表示为 与 expr1 的格式相同。expr1 是时间或日期时间 表达式,expr2 是一个时间 表达。

此函数返回类型的解析执行为 它用于 ADDTIME() 函数;有关详细信息,请参阅该函数的说明 信息。

mysql> SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002');
        -> '2007-12-30 22:58:58.999997'
mysql> SELECT SUBTIME('01:00:00.999999', '02:00:00.999998');
        -> '-00:59:59.999999'


如果 expr1 或 expr2 为NULL 则结果为NULL。

289.SUBTIME(expr1,expr2)

SUBTIME() 返回 expr1 − expr2 表示为 与 expr1 的格式相同。expr1 是时间或日期时间 表达式,expr2 是一个时间 表达。

此函数返回类型的解析执行为 它用于 ADDTIME() 函数;有关详细信息,请参阅该函数的说明 信息。

mysql> SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002');
        -> '2007-12-30 22:58:58.999997'
mysql> SELECT SUBTIME('01:00:00.999999', '02:00:00.999998');
        -> '-00:59:59.999999'

290.SUM([DISTINCT] expr) [over_clause]

返回 expr 的总和。如果 返回集没有行,SUM() 返回 。关键字只能用于求和 表达式的不同值。NULLDISTINCT

如果没有匹配的行,或者 expr 为 NULL,则 SUM() 返回NULL 。

如果存在over_clause则此函数作为窗口函数执行。over_clause如第 12.21.2 节 “窗口函数概念和语法”中所述;它不能使用 跟。DISTINCT

291.SYSDATE([fsp])

以'YYYY-MM-DD hh:mm:ss' 或 YYYYMMDDhhmmss 格式的值形式返回当前日期和时间,具体取决于 函数是在字符串上下文还是数字上下文中使用。

如果 fsp 参数给定 指定从 0 到 6 的小数秒精度,返回 值包括该多位数字中的秒小数部分。

SYSDATE() 返回时间 它执行。这与 NOW() 的行为不同,后者返回一个常量 指示语句开始的时间 执行。(在存储函数或触发器中,NOW() 返回 函数或触发语句开始执行。

mysql> SELECT NOW(), SLEEP(2), NOW();
+---------------------+----------+---------------------+
| NOW()               | SLEEP(2) | NOW()               |
+---------------------+----------+---------------------+
| 2006-04-12 13:47:36 |        0 | 2006-04-12 13:47:36 |
+---------------------+----------+---------------------+

mysql> SELECT SYSDATE(), SLEEP(2), SYSDATE();
+---------------------+----------+---------------------+
| SYSDATE()           | SLEEP(2) | SYSDATE()           |
+---------------------+----------+---------------------+
| 2006-04-12 13:47:44 |        0 | 2006-04-12 13:47:46 |
+---------------------+----------+---------------------+


此外,声明 影响 NOW() 返回的值,但不影响 SYSDATE() 返回的值。这意味着 二进制日志中的时间戳设置对 调用 SYSDATE()。

因为 SYSDATE() 可以返回 即使在同一个语句中也具有不同的值,并且不是 受 的影响,它是 非确定性,因此在以下情况下复制不安全 使用基于语句的二进制日志记录。如果这是一个问题, 可以使用基于行的日志记录。

或者,您可以使用 --sysdate-is-now 选项来 导致 SYSDATE() 成为别名 现在()。这在以下情况下有效 选项同时用于复制源服务器和 复制品。

SYSDATE() 的非确定性性质也意味着 索引不能用于计算引用的表达式 到它。

292.SYSTEM_USER()

SYSTEM_USER() 是 USER() 的同义词。

注意
SYSTEM_USER() 函数是 与SYSTEM_USER特权不同。前者返回当前 MySQL 帐户 名字。后者区分系统用户和常规用户 用户帐户类别。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值