索引目录
一.按关键字排序
- 使用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 | ! 8 | l | |
2 | ~ | 9 | =,<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN |
3 | ^ | 10 | BETWEEN,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 |
+------------------+-------------------+------------------+