目录
7.8 时间运算
7.8.1 对时间列进行加减
7.8.2 计算两个时间列的差值
7.8.3 计算两个时间列工作日差值
7.8.4 计算时间列所在的周的序号
7.8.5 计算时间列所在年的周序号
7.8 时间运算
注:数据集和表结构见 SQL基础操作_1_检索数据
7.8.1 对时间列进行加减
需求:对EMP表里员工编号为7369的hiredate按照天、月、年各加.
解决方法:通过DATEADD函数来完成.
SQL Server:
执行结果:
empno | hiredate | next_Day | next_Month | next_Month |
7369 | 1980-12-17 | 1980-12-18 | 1981-01-17 | 1981-12-17 |
MySQL:
7.8.2 计算两个时间列的差值
需求:对EMP表里员工KING和SMITH的hiredate入职时间差,这里单位是分钟、小时、天、周、月、年.
解决方法:通过DATEDIFF函数来完成.
Mysql:
执行结果:
b_Ename | b_hiredate | a_Ename | a_hiredate | minute_diff | hour_diff | day_diff | week_diff | month_diff | year_diff |
KING | 1981/11/17 0:00:00 | SMITH | 1980/12/17 0:00:00 | 482400 | 8040 | 335 | 47 | 11 | 0 |
SQL Server:
执行结果:
b_Ename | b_hiredate | a_Ename | a_hiredate | minute_Diff | hour_Diff | day_Diff | week_Diff | month_Diff | year_Diff |
KING | 1981-11-17 | SMITH | 1980-12-17 | 482400 | 8040 | 335 | 48 | 11 | 1 |
7.8.3 计算两个时间列工作日差值
需求:对EMP表里员工KING和SMITH的hiredate入职时间差,这里单位是天且是工作日时间,即周末不计算在内.
解决方法:通过DATEDIFF函数来完成.
SQL Serer:
执行结果:
b_Ename | b_hiredate | a_Ename | a_hiredate | workday_Num |
KING | 1981-11-17 | SMITH | 1980-12-17 | 240 |
Mysql:
执行结果:
b_Ename | b_hiredate | a_Ename | a_hiredate | workday_Num |
KING | 1981/11/17 0:00:00 | SMITH | 1980/12/17 0:00:00 | 240 |
7.8.4 计算时间列所在的周的序号
需求:对EMP表里员工KING和SMITH的hiredate入职时间差,基于生成的日期算每天所在的周序号.
解决方法:通过DATE_FORMAT函数来完成.
SQL Server:
执行结果:
b_Ename | b_hiredate | a_Ename | a_hiredate | date_Seq | weekno |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-17 | 星期三 |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-18 | 星期四 |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-19 | 星期五 |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-20 | 星期六 |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-21 | 星期日 |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-22 | 星期一 |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-23 | 星期二 |
… | … | … | … | … | … |
注:函数DATEPART(DW,DateValue)返回周序号,如果是星期日则是返回 1,是星期六则是7.
Mysql:
结果同上.
7.8.5 计算时间列所在年的周序号
需求:对EMP表里员工KING和SMITH的hiredate入职时间差,基于生成的日期算每天所在的周,相对于年.
解决方法:通过DATE_FORMAT函数来完成.
Mysql:
执行结果:
b_Ename | b_hiredate | a_Ename | a_hiredate | date_Seq | weekno_Year |
KING | 1981/11/17 0:00:00 | SMITH | 1980/12/17 0:00:00 | 1980/12/17 0:00:00 | 50 |
KING | 1981/11/17 0:00:00 | SMITH | 1980/12/17 0:00:00 | 1980/12/18 0:00:00 | 50 |
KING | 1981/11/17 0:00:00 | SMITH | 1980/12/17 0:00:00 | 1980/12/19 0:00:00 | 50 |
KING | 1981/11/17 0:00:00 | SMITH | 1980/12/17 0:00:00 | 1980/12/20 0:00:00 | 50 |
KING | 1981/11/17 0:00:00 | SMITH | 1980/12/17 0:00:00 | 1980/12/21 0:00:00 | 51 |
KING | 1981/11/17 0:00:00 | SMITH | 1980/12/17 0:00:00 | 1980/12/22 0:00:00 | 51 |
KING | 1981/11/17 0:00:00 | SMITH | 1980/12/17 0:00:00 | 1980/12/23 0:00:00 | 51 |
SQL Server:
执行结果:
b_Ename | b_hiredate | a_Ename | a_hiredate | date_Seq | weekno_Year |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-17 | 51 |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-18 | 51 |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-19 | 51 |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-20 | 51 |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-21 | 52 |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-22 | 52 |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-23 | 52 |
KING | 1981-11-17 | SMITH | 1980-12-17 | 1980-12-24 | 52 |
... | ... | ... | ... | ... | ... |