目录
1.返回余数 / 取模 MOD()
2.从过去的日期返回月份 MONTH()
3.返回月份名称 MONTHNAME()
4.从 LineString 值构造多行字符串 MultiLineStrig()
5.从点值构造多点 MultiPoint()
6.根据多边形值构建多面 MultiPolygon()
7.使列具有给定名称 NAME_CONST()
8.否定值 NOT / !
9.值是否不在值范围内 NOT BETWEEN ... AND ...
10.值是否不在一组值内 NOT IN()
11.否定简单模式匹配 NOT LIKE
12.正则表达式的否定 NOT REGEXP
13.返回当前日期和时间 NOW()
14.窗口框架第 N 行的参数值 NTH_VALUE()
15.分区内当前行的桶号 NTILE()
16.如果 expr1 = expr2,则返回 NULL NULLIF()
17.返回包含数字的八进制表示形式的字符串 OCT()
18.逻辑或 OR / ||
19.返回参数最左侧字符的字符代码 ORD()
20.百分比排名值 PERCENT_RANK()
21.向年月添加期间 PERIOD_ADD()
22.返回周期之间的月数 PERIOD_DIFF()
23.返回 pi (π)的值 PI()
24.从坐标构造点 Point()
25.从线字符串参数构造多边形 Polygon()
26.返回引发到指定幂的参数 POW()
27.返回引发到指定幂的参数 POWER()
28.当前线程的性能架构线程 ID PS_CURRENT_THREAD_ID()
29.给定线程的性能架构线程 ID PS_THREAD_ID()
30.从日期参数返回季度 QUARTER()
31.转义在 SQL 语句中使用的参数 QUOTE()
32.返回参数转换为弧度 RADIANS()
33.返回随机浮点值 RAND()
34.返回随机字节向量 RANDOM_BYTES()
35.分区中当前行的排名,带有间隙 RANK()
36.字符串是否与正则表达式匹配 REGEXP()
37.子字符串匹配正则表达式的起始索引 REGEXP_INSTR()
38.字符串是否与正则表达式匹配 REGEXP_LIKE()
39.替换与正则表达式匹配的子字符串 REGEXP_REPLACE()
40.返回与正则表达式匹配的子字符串 REGEXP_SUBSTR()
41.释放所有当前命名锁 RELEASE_ALL_LOCKS()
42.释放命名锁 RELEASE_LOCK()
43.将字符串重复指定的次数 REPEAT()
44.替换指定字符串的匹配项 REPLACE()
45.反转字符串中的字符 REVERSE()
46.返回指定的最右边的字符数 RIGHT()
47.字符串是否与正则表达式匹配 RLIKE
48.返回一个表示内存角色子图的 GraphML 文档 ROLES_GRAPHML()
49.舍入参数 ROUND()
50.更新的行数 ROW_COUNT()
脚本
select mod(5,2),mod(4,2);
结果
脚本
select month('2022-12-14 15:06:36')
结果
脚本
select monthname('2022-12-14 15:06:36')
结果
脚本
SET @ls3 = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
分析
MultiLineString是由LineString元素组成的MultiCurve几何体集合。
MultiLineString示例
●在区域地图上,MultiLineString可以表示河流系统或公路系统。
分析
MultiPoint是由Point元素组成的几何集合。这些点不以任何方式连接或者排序。
MultiPoint示例
●在世界地图上,MultiPoint可以代表一系列小岛。
●在城市地图上,MultiPoint可以代表售票处的出口。
MultiPoint特性
●MultiPoint是零维几何。
●如果没有两个Point值相等(具有相同的坐标值),则MultiPoint是简单的。
●MultiPoint的边界是空集。
分析
MultiPolygon是由Polygon元素组成的MultiSurface对象。
MultiPolygon 示例
●在区域地图上,MultiPolygon可以代表一个湖泊系统。
MultiPolygon 断言
●MultiPolygon没有两个内部相交的Polygon元素。
●MultiPolygon没有两个Polygon元素相互交叉(前面的断言也禁止交叉),或者有无限多个接触点。
●MultiPolygon可以没有切割线、尖刺或穿孔。MultiPolygon是一个规则的闭合点集。
●有多个Polygon的MultiPolygon有一个未连接的内部。MultiPolygon内部连接组件的数量等于MultiPolygon中Polygon值的数量。
MultiPolygon 特性
●MultiPolygon是一个二维几何体。
●MultiPolygon边界是一组与其Polygon元素边界相对应的闭合曲线(LineString值)。
●MultiPolygon边界上的每个Curve都正好位于一个Polygon元素的边界上。
●Polygon元素边界上的每个Curve都在MultiPolygon的边界上。
脚本
SELECT NAME_CONST('name', 123), 123 as name;
分析
类似于 AS 别名
结果
脚本
select not 10, not 0, not null;
分析
逻辑上不是。操作数为非零,返回0,操作数为0 ,返回1
结果
脚本
create table a
(
id int auto_increment primary key,
score int
);
insert into a (score)
values (90),
(90),
(85),
(80),
(70);
insert into a (score) value (100);
select * from a where score not between 80 and 90;
结果
脚本
create table a
(
id int auto_increment primary key,
score int
);
insert into a (score)
values (90),
(90),
(85),
(80),
(70);
insert into a (score) value (100);
select * from a where score not in (80,90,100);
结果
脚本
create table b
(
id int auto_increment primary key,
name varchar(32)
);
insert into b(name) value ('张三');
insert into b(name)
values ('李四'),
('王五');
select *
from b where name not like '李_';
结果
脚本
SELECT 'Michael!'NOT REGEXP '.*', 'new*\n*line' NOT REGEXP 'new\\*.\\*line';
结果
脚本
select now();
结果
脚本
CREATE TABLE order_content
(
order_id VARCHAR(8),
user_id VARCHAR(8),
order_price INT,
order_date DATE
);
INSERT INTO order_content (order_id, user_id, order_price, order_date)
VALUE ('o001', 'u001', 800, '2021-06-18')
, ('o002', 'u001', 800, '2021-06-19')
, ('o003', 'u001', 1000, '2021-06-22')
, ('o004', 'u001', 1200, '2021-06-24')
, ('o005', 'u002', 400, '2021-06-25')
, ('o006', 'u002', 1500, '2021-06-26')
, ('o007', 'u002', 2100, '2021-06-28')
, ('o008', 'u003', 900, '2021-07-01')
, ('o009', 'u003', 700, '2021-07-03')
, ('o010', 'u003', 1700, '2021-07-04');
SELECT *,
NTH_VALUE(order_price,1) OVER (PARTITION BY user_id ORDER BY order_price) AS lastvalue
FROM order_content;
结果
脚本
CREATE TABLE order_content
(
order_id VARCHAR(8),
user_id VARCHAR(8),
order_price INT,
order_date DATE
);
INSERT INTO order_content (order_id, user_id, order_price, order_date)
VALUE ('o001', 'u001', 800, '2021-06-18')
, ('o002', 'u001', 800, '2021-06-19')
, ('o003', 'u001', 1000, '2021-06-22')
, ('o004', 'u001', 1200, '2021-06-24')
, ('o005', 'u002', 400, '2021-06-25')
, ('o006', 'u002', 1500, '2021-06-26')
, ('o007', 'u002', 2100, '2021-06-28')
, ('o008', 'u003', 900, '2021-07-01')
, ('o009', 'u003', 700, '2021-07-03')
, ('o010', 'u003', 1700, '2021-07-04');
SELECT *,
ntile(2) OVER (PARTITION BY user_id ORDER BY order_price) AS lastvalue
FROM order_content;
结果
脚本
select nullif(1,2),nullif(2,2);
结果
脚本
SELECT OCT(12),OCT(16);
分析
十进制转换为八进制,短除法,反向取余
结果
脚本
SELECT 0 || 1, 1 OR 1, 0 OR NULL,1 || NULL;
分析
有一得一
结果
脚本
SELECT ORD('2');
分析
结果
脚本
create table a
(
id int auto_increment primary key,
score int
);
insert into a (score)
values (90),
(90),
(85),
(80),
(70);
insert into a (score) value (100);
select *, PERCENT_RANK() over (order by score)
from a;
分析
返回某列或某列组合后每行的百分比排序
结果
脚本
SELECT PERIOD_ADD(202212,2);
分析
PERIOD_ADD(expr,str)
只能添加年月,expr 年月,str增加的月份
结果
脚本
select period_diff(202212,202211);
分析
返回前后两个的月份差,前面减后面
结果
脚本
select pi();
结果
脚本
select point(28.2789745229671 ,110.827382004967);
分析
mysql的point类型,表示更习惯于key—value的lng,lat
假设不得不处理数据库字段poi是point类型,其中的数据为 :
POINT(28.2789745229671 110.827382004967)
可以直接用 : select y(poi),x(poi) from table; 这种方法直接获取lng,lat
分析
Polygon表示一个多边几何体,是平面的Surface。它由单个外部边界和零个或多个内部边界定义,其中每个内部边界定义Polygon中的一个孔。
Polygon 示例
●在区域地图上,Polygon对象可以表示森林、地区等。
Polygon断言
●Polygon的边界由一组LinearRing对象(简单且闭合的LineString对象)组成,它们构成多边形的外部边界和内部边界。
●Polygon没有交叉的环。Polygon边界上的环可以在Point上相交,但只能作为切线。
●Polygon没有线条、尖刺或穿孔。
●Polygon的内部是一个连通的点集。
●Polygon可能有孔。带有孔的Polygon的外部不是连接的。每个孔定义了一个外部的连接组件。
前面的断言决定了Polygon是简单的几何体。
脚本
select pow(2,3);
分析
POW(str1,str2)
表示str1的str2次方
结果
脚本
select power(2,3),power(8,1/3);
分析
POWER(str1,str2)
表示str1的str2次方
结果
脚本
select PS_CURRENT_THREAD_ID();
分析
返回的值 当前连接线程的id
结果
脚本
SELECT ps_thread_id(562);
分析
从MySQL 8.0.16开始, ps_thread_id ()不推荐使用,并将在将来的MySQL版本中将其删除
结果
脚本
SELECT QUARTER(now());
结果
脚本
SELECT QUOTE('Don\'t!'),QUOTE(NULL);
分析
引号字符串以生成可用作 在 SQL 语句中正确转义数据值。字符串是 返回用单引号括起来,每个都带有 反斜杠 () 的实例,单引号 ()、ASCII 和 Control+Z 前面有一个反斜杠
结果
脚本
SELECT RADIANS(90),RADIANS(180);
结果
脚本
SELECT RAND(), RAND()*10;
分析
生成一个0-1的随机浮点数
结果
脚本
SELECT RANDOM_BYTES(5),RANDOM_BYTES(5);
结果
脚本
create table a
(
id int auto_increment primary key,
score int
);
insert into a (score)
values (90),
(90),
(85),
(80),
(70);
insert into a (score) value (100);
insert into a (score) value (90);
select *, RANK() over (order by score)
from a;
分析
分区中具有相同值的行将获得相同的排名。 分区中第一行的等级是
1
。RANK()
函数将绑定行的数量添加到绑定等级以计算下一行的等级,因此,等级可能不是连续的
结果
脚本
SELECT 'Michael!' REGEXP '.*', 'new*\n*line' REGEXP 'new\\*.\\*line';
分析
str REGEXP regexp
参数
str
必需的。一个字符串。
regexp
必需的。正则表达式。
结果
SELECT REGEXP_LIKE('CamelCase', 'CAMELCASE'), REGEXP_LIKE('new*\n*line', 'new\\*.\\*line');
脚本
SELECT REGEXP_INSTR('dog cat dog', 'dog'), REGEXP_INSTR('aa aaa aaaa', 'a{4}');
分析
REGEXP_INSTR(str, regexp) REGEXP_INSTR(str, regexp, position) REGEXP_INSTR(str, regexp, position, occurrence) REGEXP_INSTR(str, regexp, position, occurrence, return_option) REGEXP_INSTR(str, regexp, position, occurrence, return_option, mode)
str
必需的。一个字符串。
regexp
必需的。正则表达式。
position
可选的。开始搜索的起始位置。默认为 。
1
occurrence
可选的。第几次匹配的内容。默认为 。
1
return_option
可选的。指定返回哪一种位置索引。如果为 ,返回匹配的子串的第一个字符的位置索引;如果为 ,返回匹配的子串的后面的位置索引。默认为 .
0
1
0
mode
可选的。执行匹配采用的模式。
匹配模式可以使用下面的值一个或多个
c
: 区分大小写i
: 区分大小写m
: 多行匹配模式n
: 点 可以匹配行结束.
u
: 仅限 unix 行结尾如果匹配模式存在矛盾的选项,则以最右边的为准
结果
脚本
SELECT REGEXP_LIKE('CamelCase', 'CAMELCASE'), REGEXP_LIKE('new*\n*line', 'new\\*.\\*line'), REGEXP_LIKE('Cat', '^ca', 'i') ;
分析
REGEXP_LIKE(expr, pat[, match_type])
str
必需的。一个字符串。
regexp
必需的。正则表达式。
mode
可选的。执行匹配采用的模式。
match_type参数可以包含以下字符:
c:区分大小写的匹配。
i:不分大小写匹配。
m:多重线模式。识别字符串中的行终止符。默认行为是仅在字符串表达式的开始和结束处匹配行终止符。
n:该
.
字符与行终止符匹配。默认设置是.
匹配以在行尾停止。u:仅限Unix的行结尾。只有换行符被
.
、^
和$
匹配运算符识别为行结束符。
结果
脚本
SELECT REGEXP_REPLACE('a b c', 'b', 'X'),REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3)
;
分析
REGEXP_REPLACE(str, regexp, replacement) REGEXP_REPLACE(str, regexp, replacement, position) REGEXP_REPLACE(str, regexp, replacement, position, occurrence) REGEXP_REPLACE(str, regexp, replacement, position, occurrence, mode)
参数
str
必需的。一个字符串。
regexp
必需的。正则表达式。
replacement
必需的。用来替换的字符串。
position
可选的。开始搜索的起始位置。默认为从头开始。
occurrence
可选的。替换第几次匹配的内容。默认为替换所有匹配的内容。
mode
可选的。执行匹配采用的模式。
匹配模式可以使用下面的值一个或多个
c
: 区分大小写i
: 区分大小写m
: 多行匹配模式n
: 点 可以匹配行结束.
u
: 仅限 unix 行结尾如果匹配模式存在矛盾的选项,则以最右边的为准
结果
脚本
SELECT REGEXP_SUBSTR('123 abc 456 def', '\\d+');
分析
REGEXP_SUBSTR(str, regexp) REGEXP_SUBSTR(str, regexp, position) REGEXP_SUBSTR(str, regexp, position, occurrence) REGEXP_SUBSTR(str, regexp, position, occurrence, mode)
匹配模式可以使用下面的值一个或多个
c
: 区分大小写i
: 区分大小写m
: 多行匹配模式n
: 点 可以匹配行结束.
u
: 仅限 unix 行结尾如果匹配模式存在矛盾的选项,则以最右边的为准
匹配模式可以使用下面的值一个或多个
c
: 区分大小写i
: 区分大小写m
: 多行匹配模式n
: 点 可以匹配行结束.
u
: 仅限 unix 行结尾如果匹配模式存在矛盾的选项,则以最右边的为准
结果
脚本
SELECT RELEASE_ALL_LOCKS();
分析
释放当前会话持有的所有命名锁,并返回释放的锁数(如果没有,则为 0)
结果
脚本
SELECT RELEASE_LOCK('lock');
分析
释放由使用 GET_LOCK() 获取的字符串
str
命名的锁。如果锁被释放,则返回,如果锁不是由这个建立的 线程(在这种情况下,锁不会释放),如果命名锁不存在则返回null。这如果 lock 从未通过调用 GET_LOCK()获得,或者如果它有 之前被释放
结果
脚本
SELECT REPEAT('ABC ',5);
分析
REPEAT(str,num);
将str字符串执行num次
结果
脚本
SELECT REPLACE('hello world', 'hello','你好');
分析
REPLACE(str,from str,to str)
将str里面的from str 全部替换为to str
结果
脚本
SELECT REVERSE('abcdefg');
结果
脚本
SELECT RIGHT('hello world', 5);
结果
脚本
SELECT 'Michael!' RLIKE '.*', 'new*\n*line' RLIKE 'new\\*.\\*line';
分析
与REGEXP()一样
结果
脚本
SELECT ROLES_GRAPHML();
分析
返回的文档
`mysql.infoschema`@`localhost`
`mysql.session`@`localhost`
`mysql.sys`@`localhost`
`root`@`%`
`test_role1`@`%`
`test_role2`@`%`
结果
脚本
select round(123.666) , round(123.456,2);
分析
遵循四舍五入的原则
ROUND(str,num)
num不写默认保存零为小数,num有值就是保存几位小数,如果num大于小数位则不就行舍入
结果
脚本
create table d
(
id int auto_increment primary key,
name varchar(32)
);
select *
from d;
insert into d(name)
values ('zs'),
('ls'),
('ww');
update d
set name = 'zl'
where id = 3;
select row_count();
分析
这里已经把ww改成zl了不知为什么它的更新行数返回零
记住ROW_COUNT()是返回更新行数则OK
结果