先定义一张表,在之后的讲解中的所有例子,都是基于这张表做的演示,那么就定义一张最常见的用户表吧。
CREATE TABLE `user` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) COLLATE UTF8MB4_UNICODE_CI NOT NULL,
`pwd` VARCHAR(255) COLLATE UTF8MB4_UNICODE_CI NOT NULL,
`created_at` INT(8) UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_created_at` (`created_at`)
) ENGINE=INNODB DEFAULT CHARSET=UTF8MB4 COLLATE = UTF8MB4_UNICODE_CI;
插入几条数据,方便之后快乐的玩耍
INSERT INTO `user` (`id`, `name`, `pwd`, `created_at`) VALUES ('1', '牛A', '555', '1559318400');
INSERT INTO `user` (`id`, `name`, `pwd`, `created_at`) VALUES ('2', '牛B', '555', '1559318400');
INSERT INTO `user` (`id`, `name`, `pwd`, `created_at`) VALUES ('3', '牛C', '555', '1573441871');
INSERT INTO `user` (`id`, `name`, `pwd`, `created_at`) VALUES ('4', '牛X', '555', '1558329240');
语句
IF 语句
IF语句根据表达式的某个条件或值结果来执行一组SQL语句。表达式可以返回TRUE,FALSE或NULL,这三个值之一。
IF
语句的语法:
IF expression THEN
statements;
END IF;
IF
语句的执行过程:
IF ELSE
语句的语法:
IF expression THEN
statements;
ELSE
else-statements;
END IF;
IF ELSE
语句的执行过程:
IF ELSEIF ELSE
语句的语法:
IF expression THEN
statements;
ELSEIF elseif-expression THEN
elseif-statements;
...
ELSE
else-statements;
END IF;
IF ELSEIF ELSE
语句的执行过程:
CASE WHEN 语句
CASE WHEN
语句的语法:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END;
示例:
# 简单的Case
SELECT *, CASE name
WHEN '牛A' THEN '大毛'
WHEN '牛B' THEN '二毛'
WHEN '牛C' THEN '三毛'
ELSE '小明' END AS nickname FROM user;
执行结果图:
# Case的搜索
SELECT *, CASE
WHEN name = '牛A' THEN '大毛'
WHEN id = 2 THEN '二毛'
WHEN created_at >= 1573441871 THEN '三毛'
ELSE '小明' END AS nickname FROM user;
执行结果图:
可以对比下两种Case的用法,虽然执行结果都一样,但第二种的用法会更多样,所以我们一般都会用第二种去实现工作中的需要,毕竟第二种适合复杂的条件判断
内置函数
IF 函数
IF()
语法:
IF(expr,v1,v2) # 如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2
示例:
SELECT IF(1 > 0,'正确','错误')
IFNULL 函数
一般用来解决查询出的结果是空值的判空问题
IFNULL()
语法:
IFNULL(v1,v2) # 如果 v1 的值不为 NULL,则返回结果 v1,否则返回 v2。
示例:
SELECT IFNULL(null,'Hello Word');
SELECT IFNULL(1/0,'错误');
ISNULL 函数
ISNULL()
语法:
ISNULL(expr) # 如果expr 为null,那么返回值为 1,否则返回值为 0
示例:
SELECT ISNULL(1 + 1);
SELECT ISNULL(1 / 0);
日期类型格式化函数
date_format()
日期转字符串
select date_format(now(), '%Y-%m-%d');
# 结果:2019-06-1
str_to_date()
字符串转日期
select str_to_date('2019-06-01', '%Y-%m-%d %H');
# 结果:2019-06-01 00:00:00
unix_timestamp()
字符串转时间戳
select unix_timestamp('2019-06-01');
# 结果:1559318400
from_unixtime()
时间戳转日期
select from_unixtime(1559318400,'%Y-%c');
# 结果:2019-6
附表
参考
https://blog.csdn.net/mengzuchao/article/details/80686181
https://www.cnblogs.com/smileFL/p/8473245.html