MySQL --- 函数大全 5

目录

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()


1.返回余数 / 取模        MOD()

脚本

select mod(5,2),mod(4,2);

结果

 

2.从过去的日期返回月份        MONTH()

脚本

select month('2022-12-14 15:06:36')

结果

3.返回月份名称        MONTHNAME()

脚本

select monthname('2022-12-14 15:06:36')

结果

4.从 LineString 值构造多行字符串        MultiLineStrig()

脚本

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

分析

MultiLineString是由LineString元素组成的MultiCurve几何体集合。

MultiLineString示例

●在区域地图上,MultiLineString可以表示河流系统或公路系统。

5.从点值构造多点        MultiPoint()

分析

MultiPoint是由Point元素组成的几何集合。这些点不以任何方式连接或者排序。

MultiPoint示例

●在世界地图上,MultiPoint可以代表一系列小岛。

●在城市地图上,MultiPoint可以代表售票处的出口。

MultiPoint特性

●MultiPoint是零维几何。

●如果没有两个Point值相等(具有相同的坐标值),则MultiPoint是简单的。

●MultiPoint的边界是空集。

6.根据多边形值构建多面        MultiPolygon()

分析

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的边界上。

7.使列具有给定名称        NAME_CONST()

脚本

SELECT NAME_CONST('name', 123), 123 as name;

分析

类似于 AS 别名

结果

8.否定值        NOT / !

脚本

select not 10, not 0, not null;

分析

逻辑上不是。操作数为非零,返回0,操作数为0 ,返回1

结果

9.值是否不在值范围内        NOT  BETWEEN ... AND ...

脚本

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;

结果

MySQL --- 函数大全 5_第1张图片

10.值是否不在一组值内        NOT IN()

脚本

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);

结果

MySQL --- 函数大全 5_第2张图片

11.否定简单模式匹配        NOT LIKE

脚本

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 '李_';

结果

12.正则表达式的否定        NOT REGEXP

脚本

SELECT 'Michael!'NOT REGEXP '.*', 'new*\n*line' NOT REGEXP 'new\\*.\\*line';

结果

 

13.返回当前日期和时间        NOW()

脚本

select now();

结果

MySQL --- 函数大全 5_第3张图片 

14.窗口框架第 N 行的参数值        NTH_VALUE()

脚本

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;

结果

MySQL --- 函数大全 5_第4张图片

15.分区内当前行的桶号        NTILE()

脚本

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;

结果

MySQL --- 函数大全 5_第5张图片

16.如果 expr1 = expr2,则返回 NULL        NULLIF()

脚本

select nullif(1,2),nullif(2,2);

结果

17.返回包含数字的八进制表示形式的字符串        OCT()

脚本

SELECT OCT(12),OCT(16);

分析

十进制转换为八进制,短除法,反向取余

结果

18.逻辑或      OR / ||  

脚本

SELECT 0 || 1, 1 OR 1, 0 OR NULL,1 || NULL;

分析

有一得一

结果

19.返回参数最左侧字符的字符代码        ORD()

脚本

 SELECT ORD('2');

分析

MySQL --- 函数大全 5_第6张图片

结果

MySQL --- 函数大全 5_第7张图片

20.百分比排名值        PERCENT_RANK()

脚本

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;

分析

返回某列或某列组合后每行的百分比排序

结果

MySQL --- 函数大全 5_第8张图片

 

21.向年月添加期间        PERIOD_ADD()

脚本

SELECT PERIOD_ADD(202212,2);

分析

PERIOD_ADD(expr,str)

只能添加年月,expr 年月,str增加的月份

结果

MySQL --- 函数大全 5_第9张图片

22.返回周期之间的月数        PERIOD_DIFF()

脚本

select period_diff(202212,202211);

分析

返回前后两个的月份差,前面减后面

结果

 

23.返回 pi (π)的值        PI()

脚本

select pi();

结果

24.从坐标构造点        Point()

脚本

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

25.从线字符串参数构造多边形        Polygon()

分析

Polygon表示一个多边几何体,是平面的Surface。它由单个外部边界和零个或多个内部边界定义,其中每个内部边界定义Polygon中的一个孔。

Polygon 示例

●在区域地图上,Polygon对象可以表示森林、地区等。

Polygon断言

●Polygon的边界由一组LinearRing对象(简单且闭合的LineString对象)组成,它们构成多边形的外部边界和内部边界。

●Polygon没有交叉的环。Polygon边界上的环可以在Point上相交,但只能作为切线。

●Polygon没有线条、尖刺或穿孔。

●Polygon的内部是一个连通的点集。

●Polygon可能有孔。带有孔的Polygon的外部不是连接的。每个孔定义了一个外部的连接组件。

前面的断言决定了Polygon是简单的几何体。

26.返回引发到指定幂的参数        POW()

脚本

select pow(2,3);

分析

POW(str1,str2)

表示str1的str2次方

结果

27.返回引发到指定幂的参数        POWER()

脚本

select power(2,3),power(8,1/3);

分析

POWER(str1,str2)

表示str1的str2次方

结果

MySQL --- 函数大全 5_第10张图片

28.当前线程的性能架构线程 ID        PS_CURRENT_THREAD_ID()

脚本

select PS_CURRENT_THREAD_ID();

分析

返回的值   当前连接线程的id

结果

MySQL --- 函数大全 5_第11张图片

29.给定线程的性能架构线程 ID        PS_THREAD_ID()

脚本

 SELECT ps_thread_id(562);

分析

从MySQL 8.0.16开始, ps_thread_id ()不推荐使用,并将在将来的MySQL版本中将其删除

结果

MySQL --- 函数大全 5_第12张图片 

30.从日期参数返回季度        QUARTER()

脚本

SELECT  QUARTER(now());

结果

MySQL --- 函数大全 5_第13张图片

31.转义在 SQL 语句中使用的参数        QUOTE()

脚本
 

SELECT QUOTE('Don\'t!'),QUOTE(NULL);

分析

 引号字符串以生成可用作 在 SQL 语句中正确转义数据值。字符串是 返回用单引号括起来,每个都带有 反斜杠 () 的实例,单引号 ()、ASCII 和 Control+Z 前面有一个反斜杠

结果

 

32.返回参数转换为弧度        RADIANS()

脚本

SELECT RADIANS(90),RADIANS(180);

结果

MySQL --- 函数大全 5_第14张图片 

33.返回随机浮点值        RAND()

脚本

SELECT RAND(), RAND()*10;

分析

生成一个0-1的随机浮点数

结果

MySQL --- 函数大全 5_第15张图片

34.返回随机字节向量        RANDOM_BYTES()

脚本

SELECT RANDOM_BYTES(5),RANDOM_BYTES(5);

结果

35.分区中当前行的排名,带有间隙        RANK()

脚本

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;

分析

分区中具有相同值的行将获得相同的排名。 分区中第一行的等级是1RANK()函数将绑定行的数量添加到绑定等级以计算下一行的等级,因此,等级可能不是连续的

结果

MySQL --- 函数大全 5_第16张图片

36.字符串是否与正则表达式匹配        REGEXP()

脚本

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');

37.子字符串匹配正则表达式的起始索引        REGEXP_INSTR()

脚本

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

可选的。指定返回哪一种位置索引。如果为 ,返回匹配的子串的第一个字符的位置索引;如果为 ,返回匹配的子串的后面的位置索引。默认为 .010

mode

可选的。执行匹配采用的模式。

匹配模式可以使用下面的值一个或多个

  • c: 区分大小写
  • i: 区分大小写
  • m: 多行匹配模式
  • n: 点 可以匹配行结束.
  • u: 仅限 unix 行结尾

如果匹配模式存在矛盾的选项,则以最右边的为准

结果

38.字符串是否与正则表达式匹配        REGEXP_LIKE()

脚本

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的行结尾。只有换行符被.^匹配运算符识别为行结束符。

结果

39.替换与正则表达式匹配的子字符串        REGEXP_REPLACE() 

脚本

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 行结尾

如果匹配模式存在矛盾的选项,则以最右边的为准

结果

40.返回与正则表达式匹配的子字符串        REGEXP_SUBSTR()

脚本

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 行结尾

如果匹配模式存在矛盾的选项,则以最右边的为准

结果

41.释放所有当前命名锁        RELEASE_ALL_LOCKS()

脚本

SELECT RELEASE_ALL_LOCKS();

分析

释放当前会话持有的所有命名锁,并返回释放的锁数(如果没有,则为 0)

结果

MySQL --- 函数大全 5_第17张图片

42.释放命名锁        RELEASE_LOCK()

脚本

SELECT RELEASE_LOCK('lock');

分析

释放由使用 GET_LOCK() 获取的字符串 str 命名的锁。如果锁被释放,则返回,如果锁不是由这个建立的 线程(在这种情况下,锁不会释放),如果命名锁不存在则返回null。这如果 lock 从未通过调用 GET_LOCK()获得,或者如果它有 之前被释放

结果

43.将字符串重复指定的次数        REPEAT()

脚本

SELECT REPEAT('ABC ',5);

分析

REPEAT(str,num);

将str字符串执行num次

结果

MySQL --- 函数大全 5_第18张图片

44.替换指定字符串的匹配项        REPLACE()

脚本

 SELECT REPLACE('hello world', 'hello','你好');

分析

REPLACE(str,from str,to str)

将str里面的from str 全部替换为to str

结果

45.反转字符串中的字符        REVERSE() 

脚本

SELECT REVERSE('abcdefg');

结果

46.返回指定的最右边的字符数        RIGHT() 

脚本

SELECT RIGHT('hello world', 5);

结果

 

47.字符串是否与正则表达式匹配        RLIKE

脚本

SELECT 'Michael!' RLIKE '.*', 'new*\n*line' RLIKE 'new\\*.\\*line';

分析

与REGEXP()一样

结果

48.返回一个表示内存角色子图的 GraphML 文档        ROLES_GRAPHML()

脚本

SELECT ROLES_GRAPHML();

分析

返回的文档



 
 
 
   
      `mysql.infoschema`@`localhost`
   

   
      `mysql.session`@`localhost`
   

   
      `mysql.sys`@`localhost`
   

   
      `root`@`%`
   

   
      `test_role1`@`%`
   

   
      `test_role2`@`%`
   

 


 

结果

MySQL --- 函数大全 5_第19张图片

 

49.舍入参数        ROUND()

脚本

select round(123.666) , round(123.456,2);

分析

遵循四舍五入的原则

ROUND(str,num)

num不写默认保存零为小数,num有值就是保存几位小数,如果num大于小数位则不就行舍入

结果

50.更新的行数        ROW_COUNT()

脚本

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();

分析

MySQL --- 函数大全 5_第20张图片

 这里已经把ww改成zl了不知为什么它的更新行数返回零

记住ROW_COUNT()是返回更新行数则OK

结果

 

你可能感兴趣的:(mysql,mysql,数据库)