MySQL学习专栏 正在持续更新中:)

文章目录

日期和时间函数 NOW STR_TO_DATE DATE_FORMAT

流程控制函数 IF IFNULL CASE

下章预告

日期和时间函数 NOW STR_TO_DATE DATE_FORMAT

函数很多 不过都有规律可记,也不难

名称

英文

中文

返回值

NOW(x)

now

现在(时间)

时间日期一起

CURDATE()

current date

当前日期

当前具体日期

CURTIME()

current time

当前时间

当前具体时间

还有一些具体从一串日期中具体提取的函数,函数名都是简单的英语:

YEAR(date)

MONTH(date)

DAY(date)

HOUR(time)

MINUTE(time)

SECOND(time)

形式上,date 是2020-1-5 time是23:34:22,注意是形式。下面是实验结果。

在上面六个函数后面加个NAME,就可以获得名字。

很明显,如果给的参数缺了(HOUR需要时间 却只给了日期),也不会返回NULL,应该是未给参数都默认补全为0了。

STR_TO_DATE: str to date 字符串转日期(格式),他需要提供解析格式,再输出正常日期的格式,我们看下面例子:

SELECT STR_TO_DATE('1-5-2019','%m-%d-%y'); 这个类似正则匹配,

SELECT STR_TO_DATE('1, 5, 2019','%m, %d, %y');

DATE_FORMAT date-format 将日期格式化成你想要的样子。

下面是格式符号的列表,不常用的都删掉了:

名称

用法

举例

%Y

四位数的年

2020

%y

两位数的年

20 (2020)

%m

01~12

%M

英语形式 eg.January

%d

01~31

-

-

-

%H

24小时制小时

00~24

%h

12小时制小时

00~12

%i

分钟

00~59

%S

一分钟钟的第几秒

00~59

流程控制函数 IF IFNULL CASE

IF 函数和IFNULL 类似三目运算符,达到条件 返回啥,不达到条件又返回啥。注意IF()可以看做一个表达式。

SELECT

`last_name`,

IF(

`commission_pct`,

'有奖金',

'没奖金'

) AS 奖金结果

FROM

employees ;

对IF而言 所谓条件就是 是否为真

对IFNULL而言 条件就是 是否为NULL。

案例 老员工回馈问题 在employees中,获得所有人的基本工资,入职时间,奖金率,资历。认为入职时间在04年以前的,资历是老员工,记为1,04以后为新员工,记为0。另外,不允许表格中出现NULL,排序按奖金率降序排列。

SELECT

`salary` 基本工资,

IFNULL(`commission_pct`, 0) 奖金率,

IFNULL(`hiredate`, 0) 入职时间,

IF(YEAR(`hiredate`)<2004, 1, 0) 资历

FROM employees

ORDER BY 奖金率 DESC;

IFNULL就是为了避免NULL的出现导致计算错误,而IF用于判断年份资历。

CASE

》第一种方式

CASE可以作为一个表达式语句,就和IF() IFNULL()一样的,作为SELECT的组成部分打印出来。尝试下面的案例, 也就是上面案例改造了一下:

USE data1;

SELECT

`salary` 基本工资,

IFNULL(`commission_pct`, 0) 奖金率,

IFNULL(`hiredate`, 0) 入职时间,

IF(YEAR(`hiredate`)<2004, 1, 0) 资历,

CASE IFNULL(`commission_pct`, 0)

WHEN 0.40 THEN salary*(1+0.6)

WHEN 0.35 THEN salary*(1+0.4)

WHEN 0.30 THEN salary*(1+0.2)

ELSE salary*(1+0.0)

END AS 第二种工资算法结果

FROM employees

ORDER BY 奖金率 DESC;

蓝框起来就作为一个语句使用,你可以给个别名“第二种工资算法结果”

结果大概这个样子:

那问题来了,如果我希望是一个区间判断呢?比如,入职时间在2000~2004年的员工奖金加成为0.6,明显上面的方式只能判断时间=2000 也即是一个定值。

》第二种方式

案例 老员工回馈问题:比起之前以2004年,一刀切认为老员工还是新员工,这里我们细分一下(类似采样频率提高 量化精度提升),在96年以前老员工回馈加成为0.6,97~02年回馈加成为0.4, etc

根据公式:salary*(1+commission_pct+回馈加成) = 最终工资

计算所有人的最终工资,降序排列输出。

栏目:名字 入职时间 奖金率 最终工资

最终效果如图:

USE data1;

SELECT

CONCAT(`last_name`,'-',`first_name`) 名字,

`salary` 基本工资,

IFNULL(`commission_pct`, 0) 奖金率,

IFNULL(`hiredate`, 0) 入职时间,

CASE

WHEN YEAR(`hiredate`) < 1996

THEN `salary` * (1+0.6+IFNULL(`commission_pct`, 0))

WHEN YEAR(`hiredate`) BETWEEN 1997 AND 2000

THEN `salary` * (1+0.4+IFNULL(`commission_pct`, 0))

WHEN YEAR(`hiredate`) BETWEEN 2001 AND 2010

THEN `salary` * (1+0.2+IFNULL(`commission_pct`, 0))

WHEN YEAR(`hiredate`) BETWEEN 2011 AND 2014

THEN `salary` * (1+0.1+IFNULL(`commission_pct`, 0))

ELSE `salary` * (1+0.0+IFNULL(`commission_pct`, 0))

END AS 最终工资

FROM

employees

ORDER BY 最终工资 DESC ;

下章预告

目前我们学习了几种所谓单行函数:

数学函数

字符串处理函数

时间日期函数

流程控制函数,

说白了,算一个值出一个结果的就是单行函数,

然而数据库的重点在于数理统计,意味着我们要处理一组数,返回一些统计量(statistics)(如平均数(average) 中位数(median))

那么这样的统计函数称为统计函数(别名 组函数 多组函数)

下一站:数据库学习之MySQL (十一)——统计函数

mysql now str,数据库学习之MySQL (十)—— 日期和时间函数 NOW STR_TO_DATE DATE_FORMAT 流程控制函数 IF IFNULL CASE...相关推荐

  1. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

  2. 学习SQL:使用日期和时间函数创建SQL Server报表

    In the previous two articles of this series, we've discussed how to create a report and how to use b ...

  3. mysql with as_mysql数据库学习(第十六篇)- 视图

    视图 视图的行和列来自定义视图的查询中使用的表,并且是在使用视图时动态生成的. 创建视图 Create view 视图名字 as ( 单表 or 多表 or 视图) Create / Replace ...

  4. 学习SQL:SQL Server日期和时间函数

    So far, we haven't talked about SQL Server date and time functions. Today we'll change that. We'll t ...

  5. 数据库学习之MySQL (十六)—— SQL99 外连接 左外连接 右外连接 全外连接 交叉连接

    文章目录 外连接 之 左外连接 与 右外连接 为啥要用外连接 全外连接 总结 内连接 外连接 交叉连接 外连接 之 左外连接 与 右外连接 我们先来看个之前的 女神男朋友的案例 传送:数据库学习之My ...

  6. 数据库学习之MySQL (九)—— 数学函数 字符串函数 CONCAT TRIM PAD

    MySQL学习专栏 正在持续更新中:) 文章目录 复习一下 前面学到的函数 LENGTH CONCAT 数学函数 ABS CEIL FLOOR ROUND POW 常用字符串函数 SUBSTR REP ...

  7. 数据库学习之MySQL (十七)—— SQL99 主查询 与 子查询 子查询分类之WHERE的子查询

    文章目录 主查询 子查询 纲举目张--子查询的分类 WHERE语句后的 子查询 主查询 子查询 概念集中于SELECT语句 之前我们所学习的所有,都是SELECT作为独立的一句 是主干,是爸爸 后面跟 ...

  8. 数据库学习之MySQL (三)——数据库小试牛刀 + 利用对象思维理解表行列

    文章目录 前言 ´・ᴗ・` 获得自己第一个数据库 执行代码 小试牛刀 简单语句的实验方法 表 的理解 总结 ´◡` 前言 ´・ᴗ・` 本文我们将通过运行sql代码 得到自己的第一个数据库 我们学习的重 ...

  9. linux如何mysql实现导出数据库,Linux下MySQL导入导出数据库

    linux下 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径): 1.导出数据和表结构: mysqldump -u用户名 -p密码 数据库名 > 数据库名.sq ...

最新文章

  1. 卡内基梅隆大学机器学习系副主任邢波:AI落地现在最缺的是思维方式
  2. scipy.spatial.distance 与 sklearn cosine_similarity
  3. c语言程序代码_10道C语言笔试模拟题,来看看你掌握的怎么样?
  4. python中的函数参数主要有四种_python3中函数参数的四种简单用法
  5. Docker操作笔记(四)使用网络
  6. linux中文本查找命令,Linux常用的文本查找命令 find
  7. 程序员面试金典——17.5珠玑妙算
  8. python征程3.1(列表,迭代,函数,dic,set,的简单应用)
  9. markdown表情大全
  10. 哪种处理器能跑vs还有oracle,AMD处理器哪个最强 2020AMD处理器性能排行榜
  11. 一元线性回归模型系数、方差估计、检验回归效果显著性,b的置信区间,Y约为X的指数函数时,求Y关于x的回归方程
  12. 神奇魔方html5游戏在线玩,神奇的魔方
  13. 在局域网中发信息的三种方法
  14. openssl(CVE-2014-0160)心脏出血漏洞复现
  15. 利用二维数组实现一个矩阵类:Matrix
  16. 维克采购管理软件 v2.0 免费
  17. ceph rbd mysql_如何在 Kubernetes 环境中搭建 MySQL(三):使用 PVC 挂接 RBD
  18. pvid与access的关系_交换机应用之端口模式(access、trunk和hybird)、是否标记(tag、untag)、端口缺省vlan(pvid、native id)...
  19. Listary中使用Everything搜索
  20. Android 框架学习5:微信热修复框架 Tinker 从使用到 patch 加载、生成、合成原理分析

热门文章

  1. 逻辑地址,线性地址,物理地址
  2. tomcat开启SSL8443端口的方法
  3. 关于easyui datagrid分页的json格式
  4. 11.11.25 v2 done
  5. XenDesktop 5 修改XML端口
  6. MSSQL字符串处理-清除指定不连续或连续的字符
  7. Hyper-V实战:高可用性-网络规划篇(Hyper-V1.0)
  8. CCIE学习(7)——VLAN相关命令汇总
  9. 单片机c语言慧尾灯编码,(参考)基于单片机的智能尾灯开发文档.doc
  10. vue v-if指令