MySQL高级语句精讲

索引目录

一.按关键字排序

1.单字段排序

2.多字段排序

3.对结果进行排序

二.对结果进行分组

1.group by分组

2.group by结合order by

三、限制结果条目

LIMIT语法结构

四、设置别名

五、通配符的使用

 六、子查询

七、NULL值

八、正则表达式

九、运算符

1.算数运算符

2.比较运算符

3.位运算符

4.逻辑运算符

5.运算符优先级

十.连接查询

1.内联

2.左连接

3.右连接

十一.数据库函数

1.数学函数

2.聚合函数

3.字符串函数

4.日期时间函数


一.按关键字排序

  • 使用ORDERBY语句来实现排序
  • 排序可针对一个或多个字段
  • ASC:升序,默认排序方式 【升序是从小到大】
  • DESC:降序 【降序是从大到小】
  • ORDER BY的语法结构

SELECT column1, column2, ... FROM table_ name ORDER BY column1, column2, ... ASC|DESC;

1.单字段排序

默认升序

降序

mysql> select *from vip order by id desc;
+----+----------+-------+
| id | name     | money |
+----+----------+-------+
|  6 | ergou    | 444   |
|  5 | keai     | 555   |
|  4 | xinger   | 666   |
|  3 | weilai   | 777   |
|  2 | ziyang   | 888   |
|  1 | zhangsan | 999   |
+----+----------+-------+
6 rows in set (0.00 sec)

2.多字段排序

mysql> select * from svip order by money desc,id asc;
+------+----------+-------+
| id   | name     | money |
+------+----------+-------+
|    2 | zhangsan | 999   |
|    3 | ziyang   | 666   |
|    6 | keai     | 555   |
|    5 | xinger   | 444   |
|    4 | weilai   | 222   |
+------+----------+-------+
5 rows in set (0.00 sec)

3.对结果进行排序

  • 使用GROUP BY语句来实现分组
  • 通常结合聚合函数一起使用
  • 可以按一个或多个字段对结果进行分组
  • GROUP BY的语法结构

二.对结果进行分组

1.group by分组

按照number分组,并统计每组人数
mysql> select count(id),number from vip group by number;
+-----------+--------+
| count(id) | number |
+-----------+--------+
|         1 |     10 |
|         2 |     12 |
|         3 |     15 |
|         1 |     17 |
+-----------+--------+
4 rows in set (0.00 sec)

2.group by结合order by

按照number分组,并统计每组人数,以降序排序
mysql> select count(id),number from vip group by number order by number desc;
+-----------+--------+
| count(id) | number |
+-----------+--------+
|         1 |     17 |
|         3 |     15 |
|         2 |     12 |
|         1 |     10 |
+-----------+--------+
4 rows in set (0.00 sec)

三、限制结果条目

在使用 MySQL SELECT 语句进行查询时,结果集返回的是所有匹配的记录。有时候仅需要返回第一行或者前几行,这时候就需要用到 LIMIT 子句。

LIMIT 的第一个参数是位置偏移量(可选参数),是设置 MySQL 从哪一行开始显示。如果不设定第一个参数,将会从表中的第一条记录开始显示。需要注意的是,第一条记录的位置偏移量是 0,第二条是 1,以此类推。第二个参数是设置返回记录行的最大数目。

  • 只返回SELECT查询结果的第一行或前几行
  • 使用LIMIT语句限制条目

LIMIT语法结构

SELECT column1, column2, .... FROM table_ name LIMIT [offset,] number; //FROM 表名 LIMIT 位置偏移量

查看表前俩行

mysql> select *from vip limit 2;
+------+--------+--------+------+
| id   | name   | number | age  |
+------+--------+--------+------+
|    1 | ziyang |     10 |   24 |
|    2 | xiner  |     12 |   17 |
+------+--------+--------+------+
2 rows in set (0.00 sec)

查看表后三行

mysql> select *from vip limit 4,3;
+------+----------+--------+------+
| id   | name     | number | age  |
+------+----------+--------+------+
|    5 | yueliang |     15 |   21 |
|    6 | meimei   |     15 |   24 |
|    7 | menxin   |     15 |   21 |
+------+----------+--------+------+

四、设置别名

  • 使用AS语句设置别名,关键字AS可省略
  • 设置别名时,保证不能与库中其他表或字段名称冲突
  • 别名的语法结构
SEL .ECT column_ name AS列的别名 alias_ name FROM table_ name;
SEL .ECT column_ name(s)原字段或者表名在库内并不会被改变 FROM table_ name AS表的别名 alias name;

 

mysql> select name 姓名, age 分数 from vip;
+----------+--------+
| 姓名     | 分数   |
+----------+--------+
| ziyang   |     24 |
| xiner    |     17 |
| weilai   |     24 |
| keai     |     20 |
| yueliang |     21 |
| meimei   |     24 |
| menxin   |     21 |
+----------+--------+

 

as作为连接语句

mysql> create table vvip as select *from svip;
Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select *from vvip;
+------+----------+-------+
| id   | name     | money |
+------+----------+-------+
|    2 | zhangsan | 999   |
|    3 | ziyang   | 666   |
|    4 | weilai   | 222   |
|    5 | xinger   | 444   |
|    6 | keai     | 555   |
+------+----------+-------+

五、通配符的使用

  • 用于替换字符串的部分字符
  • 通常配合LIKE一起使用,并协同WHERE完成查询
  • 常用的通配符
  • %表示零个、一个或多个
  • _表示单个字符

eg:查找zhangsan,显示money

mysql> select name,money from vvip where name like 'zhangsan';
+----------+-------+
| name     | money |
+----------+-------+
| zhangsan | 999   |
+----------+-------+

eg:z后面任意字符

mysql> select name,money from vvip where name like 'z%';
+----------+-------+
| name     | money |
+----------+-------+
| zhangsan | 999   |
| ziyang   | 666   |
+----------+-------+

eg:结合使用,查找m开头,过滤第二个字符

mysql> select name,age from vip where name like 'm_%';
+--------+------+
| name   | age  |
+--------+------+
| meimei |   24 |
| menxin |   21 |
+--------+------+

 六、子查询

  • 也称作内查询或者嵌套查询
  • 先于主查询被执行,其结果将作为外层主查询的条目
  • 在增删改查中都可以使用子查询
  • 支持多层嵌套
  • IN语句是用来判断某个值是否在给定的结果集中

子查询用法

mysql> select *from abc;
+------+
| id   |
+------+
|    1 |
|    3 |
|    5 |
|    7 |
+------+
4 rows in set (0.00 sec)

mysql> select *from vip;
+------+----------+--------+------+
| id   | name     | number | age  |
+------+----------+--------+------+
|    1 | ziyang   |     10 |   24 |
|    2 | xiner    |     12 |   17 |
|    3 | weilai   |     12 |   24 |
|    4 | keai     |     17 |   20 |
|    5 | yueliang |     15 |   21 |
|    6 | meimei   |     15 |   24 |
|    7 | menxin   |     15 |   21 |
+------+----------+--------+------+
7 rows in set (0.00 sec)
#筛选vip表id与abc表id相匹配的内容
mysql> select *from vip where id in (select id from abc);
+------+----------+--------+------+
| id   | name     | number | age  |
+------+----------+--------+------+
|    1 | ziyang   |     10 |   24 |
|    3 | weilai   |     12 |   24 |
|    5 | yueliang |     15 |   21 |
|    7 | menxin   |     15 |   21 |
+------+----------+--------+------+
4 rows in set (0.00 sec)

多层嵌套

mysql> select *from vip where name in(select name from svip where name in(select name from svip));
+------+--------+--------+------+
| id   | name   | number | age  |
+------+--------+--------+------+
|    1 | ziyang |     10 |   24 |
|    3 | weilai |     12 |   24 |
|    4 | keai   |     17 |   20 |
+------+--------+--------+------+

七、NULL值

  • 表示缺失的值
  • 与数字0或者空白(spaces)是不同的
  • 使用IS NULL或IS NOT NULL进行判断
  • NULL值和空值的区别
  • 空值长度为0,不占空间;NULL值的长度为NULL,占用空间
  • IS NULL无法判断空值
  • 空值使用“=”或者“<>”来处理
  • COUNT()计算时,NULL会忽略,空值会加入计算

八、正则表达式

  • 根据指定的匹配模式匹配记录中符合要求的特殊字符
  • 使用REGEXP关键字指定匹配模式

 

字符

说明

^

匹配开始字符

$

匹配结束字符

.

匹配任意单个字符

*

匹配任意个前面的字符

+

匹配前面字符至少1次

p1|p2

匹配p1或p2

[...]

匹配字符集中括号内的任何字符

[^...]

匹配不在括号内的任何字符

{n}

匹配前面的字符串n次

{n,m}

匹配前面的字符串至少n次,至多m次

eg:查询“z”开头的记录

mysql> select *from vip where name regexp '^z';
+------+--------+--------+------+
| id   | name   | number | age  |
+------+--------+--------+------+
|    1 | ziyang |     10 |   24 |
+------+--------+--------+------+

eg:查询以“g”结尾的记录

mysql> select *from vip where name regexp 'g$';
+------+----------+--------+------+
| id   | name     | number | age  |
+------+----------+--------+------+
|    1 | ziyang   |     10 |   24 |
|    5 | yueliang |     15 |   21 |
+------+----------+--------+------+

eg:代表任意字符查询weilai

mysql> select *from vip where name regexp 'we....';
+------+--------+--------+------+
| id   | name   | number | age  |
+------+--------+--------+------+
|    3 | weilai |     12 |   24 |
+------+--------+--------+------+

eg:匹配任意个前面的字符

mysql> select *from vip where name regexp 'xi*';
+------+--------+--------+------+
| id   | name   | number | age  |
+------+--------+--------+------+
|    2 | xiner  |     12 |   17 |
|    7 | menxin |     15 |   21 |
+------+--------+--------+------+

eg: 匹配字符集中括号内的任何字符([...])

mysql> select *from vip where name regexp '[xm]';
+------+--------+--------+------+
| id   | name   | number | age  |
+------+--------+--------+------+
|    2 | xiner  |     12 |   17 |
|    6 | meimei |     15 |   24 |
|    7 | menxin |     15 |   21 |
+------+--------+--------+------+

eg:匹配不在括号内的任何字符

mysql> select *from vip where name regexp '[^xm]';
+------+----------+--------+------+
| id   | name     | number | age  |
+------+----------+--------+------+
|    1 | ziyang   |     10 |   24 |
|    2 | xiner    |     12 |   17 |
|    3 | weilai   |     12 |   24 |
|    4 | keai     |     17 |   20 |
|    5 | yueliang |     15 |   21 |
|    6 | meimei   |     15 |   24 |
|    7 | menxin   |     15 |   21 |
+------+----------+--------+------+

九、运算符

1.算数运算符

字符

说明

+

加法

-

减法

*

乘法

/

除法

%

取余数

mysql>  select 6+7 as addition,6-5 as subtraction,5*7 as multiplication,4/2 as division,8%4 as remainder;
+----------+-------------+----------------+----------+-----------+
| addition | subtraction | multiplication | division | remainder |
+----------+-------------+----------------+----------+-----------+
|       13 |           1 |             35 |   2.0000 |         0 |
+----------+-------------+----------------+----------+-----------+

2.比较运算符

字符串的比较默认不区分大小写,可使用binary来区分

运算符

说明

=

等于 

大于 

小于 

>=

大于或等于 

<=

小于或等于 

!=或<>

不等于

IN

在集合中

LIKE

通配符匹配

IS NULL

判断一个值是否为NULL

IS NOT NULL

判断一个值是否不为NULL

BETWEEN AND

两者之间

GREATEST

两个或多个参数时返回最大值

LEAST

两个或多个参数时返回最小值

mysql>  select 2=4,2='2','e'='e',(4+3)=(7+4),'n'=NULL;
+-----+-------+---------+-------------+----------+
| 2=4 | 2='2' | 'e'='e' | (4+3)=(7+4) | 'n'=NULL |
+-----+-------+---------+-------------+----------+
|   0 |     1 |       1 |           0 |     NULL |
+-----+-------+---------+-------------+----------+
mysql>  select 'dfg'<>'abc',1!=2,NULL!=NULL;
+--------------+------+------------+
| 'dfg'<>'abc' | 1!=2 | NULL!=NULL |
+--------------+------+------------+
|            1 |    1 |       NULL |
+--------------+------+------------+
1 row in set (0.01 sec)

3.位运算符

对二进制数进行计算的运算符

运算符

说明

&

按位与

|

按位或

~

按位取反

^

按位异或

<< 

按位左移

>> 

按位右移

mysql> select 11&116,10|15,10^15,5 &~1;
+--------+-------+-------+-------+
| 11&116 | 10|15 | 10^15 | 5 &~1 |
+--------+-------+-------+-------+
|      0 |    15 |     5 |     4 |
+--------+-------+-------+-------+

4.逻辑运算符

逻辑运算符又被称为布尔运算符,通常用来判断表达式的真假,如果为真返回 1,否则返回 0,真和假也可以用 TRUE 和 FALSE 表示。

运算符

说明

NOT或!

逻辑非

AND或&&

逻辑与

OR或||

逻辑或

XOR

逻辑异或

逻辑非

逻辑运算符中最简单的运算符就是逻辑非,逻辑非使用 NOT 或!表示。逻辑非将跟在它后面的逻辑测试取反,把真变为假,把假变为真。如果 NOT 后面的操作数为 0 时,所得值为 1;如果操作数为非 0 时,所得值为 0;如果操作数为 NULL 时,所得值为 NULL。例如,对非 0 值和 0 值分别作逻辑非运算,具体操作如下所示。

mysql> select not 0,not 2,!6,!(3-3);
+-------+-------+----+--------+
| not 0 | not 2 | !6 | !(3-3) |
+-------+-------+----+--------+
|     1 |     0 |  0 |      1 |
+-------+-------+----+--------+

逻辑与

逻辑与通常用于判断两个值或多个值的有效性,如果所有值都是真返回 1,否则返回 0。逻辑与使用 AND 或者&&表示。例如,对非 0 值、0 值和 NULL 值分别作逻辑与运算,具体操作如下所示。

mysql> select 2 and 3,4 && 0,0 && NULL,1 and NULL;
+---------+--------+-----------+------------+
| 2 and 3 | 4 && 0 | 0 && NULL | 1 and NULL |
+---------+--------+-----------+------------+
|       1 |      0 |         0 |       NULL |
+---------+--------+-----------+------------+

逻辑或

逻辑与通常用于判断两个值或多个值的有效性,如果所有值都是真返回 1,否则返回 0。逻辑与使用 AND 或者&&表示。例如,对非 0 值、0 值和 NULL 值分别作逻辑与运算。
一旦有个非0值,出来就是非0值

mysql> select 3 or 4,5 or 0;
+--------+--------+
| 3 or 4 | 5 or 0 |
+--------+--------+
|      1 |      1 |
+--------+--------+

逻辑异或

两个非 NULL 值的操作数,如果两者都是 0 或者都是非 0,则返回 0;如果一个为 0, 另一个为非 0,则返回结果为 1;当任意一个值为 NULL 时,返回值为 NULL。例如,对非0 值、0 值和 NULL 值分别作逻辑异或运算,具体操作如下所示。
有null结果就会为null。

mysql> select 0 xor 3,0 xor 0,0 xor null,1 xor null;
+---------+---------+------------+------------+
| 0 xor 3 | 0 xor 0 | 0 xor null | 1 xor null |
+---------+---------+------------+------------+
|       1 |       0 |       NULL |       NULL |
+---------+---------+------------+------------+

5.运算符优先级

以上不管哪种运算符,在使用过程中都有优先级问题。运算符的优先级决定了不同的运算符在计算过程中的先后顺序。级别高的运算符会先进行计算,如果运算符的级别相同, MySQL会按照顺序从左到右依次进行计算。如果不确定所使用的运算符的优先级,可以使用()改变优先级

优先级运算符优优先级运算符
1! 8l 
2~9=,<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN
3^10BETWEEN,CASE,WHEN,THEN,ELSE
4*, /(DIV), %(MOD)11
5+,-12&&,AND
6>>,<<13 
7&14:=


十.连接查询

MySQL的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接,首先,要确定一个主表作为结果集,然后将其他表的行有选择性的连接到选定的主表结果集上,使用较多的连接查询包括:内连接、左连接和右连接

1.内联

当满足条件时,INNER JOIN 将返回由 tt表和 gg表中的列组成的新行。如果没有匹配项,查询将返回一个空的结果集。

 

mysql> select *from vip inner join svip on vip.name=svip.name;
+------+--------+--------+------+------+--------+-------+
| id   | name   | number | age  | id   | name   | money |
+------+--------+--------+------+------+--------+-------+
|    1 | ziyang |     10 |   24 |    3 | ziyang | 666   |
|    3 | weilai |     12 |   24 |    4 | weilai | 222   |
|    4 | keai   |     17 |   20 |    6 | keai   | 555   |
+------+--------+--------+------+------+--------+-------+

2.左连接

  • MySQL 除了内连接,还可以使用外连接。区别于 MySQL
    外连接是将表分为基础表和参考表,再依据基础表返回满足条件或不满足条件的目录。外连接按照连接时表的顺序来分, 有左连接和右连接之分。
  • 左连接也可以被称为左外连接,在 FROM 子句中使用 LEFT JOIN 或者 LEFT OUTER JOIN
    关键字来表示。左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行。

mysql> select *from vip left join svip on vip.name=svip.name;
+------+----------+--------+------+------+--------+-------+
| id   | name     | number | age  | id   | name   | money |
+------+----------+--------+------+------+--------+-------+
|    1 | ziyang   |     10 |   24 |    3 | ziyang | 666   |
|    3 | weilai   |     12 |   24 |    4 | weilai | 222   |
|    4 | keai     |     17 |   20 |    6 | keai   | 555   |
|    2 | xiner    |     12 |   17 | NULL | NULL   | NULL  |
|    5 | yueliang |     15 |   21 | NULL | NULL   | NULL  |
|    6 | meimei   |     15 |   24 | NULL | NULL   | NULL  |
|    7 | menxin   |     15 |   21 | NULL | NULL   | NULL  |
+------+----------+--------+------+------+--------+-------+

3.右连接

mysql> select *from vip right join svip on vip.name=svip.name;
+------+--------+--------+------+------+----------+-------+
| id   | name   | number | age  | id   | name     | money |
+------+--------+--------+------+------+----------+-------+
|    1 | ziyang |     10 |   24 |    3 | ziyang   | 666   |
|    3 | weilai |     12 |   24 |    4 | weilai   | 222   |
|    4 | keai   |     17 |   20 |    6 | keai     | 555   |
| NULL | NULL   |   NULL | NULL |    2 | zhangsan | 999   |
| NULL | NULL   |   NULL | NULL |    5 | xinger   | 444   |
+------+--------+--------+------+------+----------+-------+

十一.数据库函数

1.数学函数

函数

含义

abs(x)

返回x的绝对值

rand()

返回0到1的随机数

mod(x,y)

返回x除以y以后的余数

power(x,y)

返回x的y次方

round(x)

返回离x最近的整数

round(x,y)

保留x的y位小数四舍五入后的值

sqrt(x)

返回x的平方根

truncate(x,y)

返回数字x截断为y位小树的值

ceil(x)

返回大于或等于x的最小整数

floor(x)

返回小于或等于x的最大整数

greatest(x1,x2...)

返回集合中最大的值

least(x1,x2...)

返回集合中最小的值

eg:abs(x) 返回x的绝对值

mysql> select abs(-16);
+----------+
| abs(-16) |
+----------+
|       16 |
+----------+

eg:rand() 返回0到1的随机数

mysql> select rand();
+--------------------+
| rand()             |
+--------------------+
| 0.5057473653049649 |
+--------------------+

eg:mod(x, y)  返回x除以y以后的余数

mysql> select mod(10,6);
+-----------+
| mod(10,6) |
+-----------+
|         4 |
+-----------+

eg:power(x, y)  返回x除以y以后的余数

mysql> select power(2,3);
+------------+
| power(2,3) |
+------------+
|          8 |
+------------+

eg:round(x)  返回离x最近的整数

mysql> select round(3.5);
+------------+
| round(3.5) |
+------------+
|          4 |
+------------+

eg:sqrt(x) 返回x的平方根

mysql> select sqrt(64);
+----------+
| sqrt(64) |
+----------+
|        8 |
+----------+

eg:truncate(x, y)  返回数字x截断为y位小数的值

mysql> select truncate(3.1415,2);
+--------------------+
| truncate(3.1415,2) |
+--------------------+
|               3.14 |
+--------------------+

eg:ceil(x)  返回大于或等于x的最小整数

mysql> select ceil(3.14);
+------------+
| ceil(3.14) |
+------------+
|          4 |
+------------+

eg:floor(x)  返回小于或等于x的最大整数

mysql> select floor(3.14);
+-------------+
| floor(3.14) |
+-------------+
|           3 |
+-------------+

eg:greatest(x 1, x 2…)   返回集合中最大的值

mysql> select greatest(3,4,5,7,9,11);
+------------------------+
| greatest(3,4,5,7,9,11) |
+------------------------+
|                     11 |
+------------------------+

eg:least(x 1, x 2…)  返回集合中最小的值

mysql> select least(3,4,5,7,9,11);
+---------------------+
| least(3,4,5,7,9,11) |
+---------------------+
|                   3 |
+---------------------+

2.聚合函数

对表中数据记录进行集中概括而设计的一类函数

函数

含义

avg()

返回指定列的平均值

count()

返回指定列中非NULL值的个数

min()

返回指定看列的最小值

max()

返回指定列的最大值

sum()

返回指定列的所有值之和

eg:avg() :返回指定列的平均值

mysql> select avg(age) from vip;
+----------+
| avg(age) |
+----------+
|  21.5714 |
+----------+

eg:count() :返回指定列中非NULL值的个数

mysql> select count(name) from vip;
+-------------+
| count(name) |
+-------------+
|           7 |
+-------------+

eg:min() :返回指定列的最小值

mysql> select min(age) from vip;
+----------+
| min(age) |
+----------+
|       17 |
+----------+

eg:max() :返回指定列的最大值

mysql> select max(age) from vip;
+----------+
| max(age) |
+----------+
|       24 |
+----------+

eg:sum() :返回指定列的所有值之和

mysql> select sum(age) from vip;
+----------+
| sum(age) |
+----------+
|      151 |
+----------+

3.字符串函数

函数

含义

length(x)

返回字符串x的长度

trim()

返回去除指定格式的值

concat(x,y)

将提供的参数x和y拼接成一个字符串

upper(x)

将字符串x的所有字母变成大写字母

lower(x)

将字符串x的所有字母变成小写字母

left(x,y)

返回字符串x的前y个字符

right(x,y)

返回字符串x的后y个字符

repeat(x.y)

将字符串x重复y次

space(x)

返回x个空格

replace(x,y,z)

将字符串z替代字符串x中的字符串y

strcmp(x,y)

比较x和y,返回的值可以位-1,0,1

substring(x,y,z)

获取从从字符串x中的第y个位置开始长度为z的字符串

reverse(x)

将字符串x反转

eg:length(x) :返回字符串x的长度

mysql> select length ('nice');
+-----------------+
| length ('nice') |
+-----------------+
|               4 |
+-----------------+

eg:trim() :返回去除指定格式的值

mysql> select trim('   nice');
+-----------------+
| trim('   nice') |
+-----------------+
| nice            |
+-----------------+

eg:concat(x, y): 将提供的参数x和y拼接成一个字符串

mysql> select concat('moon,nice');
+---------------------+
| concat('moon,nice') |
+---------------------+
| moon,nice           |
+---------------------+

eg:upper(x) :将字符串x的所有字母变成大写字母

mysql> select upper('moon,nice');
+--------------------+
| upper('moon,nice') |
+--------------------+
| MOON,NICE          |
+--------------------+


eg:lower(x) :将字符串x的所有字母变成小写字母

mysql> select lower('Moon,nice');
+--------------------+
| lower('Moon,nice') |
+--------------------+
| moon,nice          |
+--------------------+


eg:left(x, y) :返回字符串x的前y个字符

mysql> select left('Moon',2);
+----------------+
| left('Moon',2) |
+----------------+
| Mo             |
+----------------+


eg:right(x, y) :返回字符串x的后y个字符

mysql> select right('Moon',2);
+-----------------+
| right('Moon',2) |
+-----------------+
| on              |
+-----------------+


eg:repeat(x, y) :将字符串x重复y次

mysql> select repeat('M',5);
+---------------+
| repeat('M',5) |
+---------------+
| MMMMM         |
+---------------+


eg:space(x): 返回x个空格

mysql> select space(5);
+----------+
| space(5) |
+----------+
|          |
+----------+


eg:replace(x, y, z) :将字符串z替代字符串x中的字符串y

mysql> select replace('Moon','oo','ee');
+---------------------------+
| replace('Moon','oo','ee') |
+---------------------------+
| Meen                      |
+---------------------------+


eg:strcmp(x, y) :比较x和y, 返回的值可以为-1, 0, 1

mysql> select space(2),replace('abcde','e','g'),strcmp('a','b'),strcmp('a','a'),strcmp('b','a');\
+----------+--------------------------+-----------------+-----------------+-----------------+
| space(2) | replace('abcde','e','g') | strcmp('a','b') | strcmp('a','a') | strcmp('b','a') |
+----------+--------------------------+-----------------+-----------------+-----------------+
|          | abcdg                    |              -1 |               0 |               1 |
+----------+--------------------------+-----------------+-----------------+-----------------+


eg:substring(x, y, z): 获取从字符串x中的第y个位置开始长度为z的字符串

mysql> select substring('moon',2,2);
+-----------------------+
| substring('moon',2,2) |
+-----------------------+
| oo                    |
+-----------------------+


eg:reverse(x)将字符串x反转

mysql> select reverse('moon');
+-----------------+
| reverse('moon') |
+-----------------+
| noom            |
+-----------------+

4.日期时间函数

函数

含义

curdate()

返回当前时间的年月日

curtime()

返回当前时间的时分秒

now()

返回当前时间的日期和时间

month()

返回日期x中的月份值

week(x)

返回日期x是年度第几个星期

hour(x)

返回x中的小时值

minute(x)

返回x中的分钟值

second(x)

返回x中的秒钟值

dayofweek(x)

返回x是星期几,1星期日,2星期1

dayofmonth(x)

计算日期x是本月的第几天

dayofyear(x)

计算日期x是本年的第几天

eg:

mysql> select curdate(),curtime(),now();
+------------+-----------+---------------------+
| curdate()  | curtime() | now()               |
+------------+-----------+---------------------+
| 2020-11-05 | 16:49:58  | 2020-11-05 16:49:58 |
+------------+-----------+---------------------+
mysql> select month('2020-11-05'),week('2020-11-05'),hour('16:56');
+---------------------+--------------------+---------------+
| month('2020-11-05') | week('2020-11-05') | hour('16:56') |
+---------------------+--------------------+---------------+
|                  11 |                 44 |            16 |
+---------------------+--------------------+---------------+
mysql> select dayofweek(now()),dayofmonth(now()),dayofyear(now());
+------------------+-------------------+------------------+
| dayofweek(now()) | dayofmonth(now()) | dayofyear(now()) |
+------------------+-------------------+------------------+
|                5 |                 5 |              310 |
+------------------+-------------------+------------------+

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moon-01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值