日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL基础操作_7_时间运算

發布時間:2024/9/27 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL基础操作_7_时间运算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

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:

SELECT empno,hiredate,DATEADD(DAY,1,hiredate) next_Day, DATEADD(MONTH,1,hiredate) next_Month, DATEADD(YEAR,1,hiredate) next_Year FROM emp WHERE empno = 7369

執行結果:

empno

hiredate

next_Day

next_Month

next_Month

7369

1980-12-17

1980-12-18

1981-01-17

1981-12-17


MySQL:

SELECT empno,hiredate,DATE_ADD(hiredate,INTERVAL1DAY) AS next_Day, DATE_ADD(hiredate,INTERVAL1MONTH) AS next_Day, DATE_ADD(hiredate,INTERVAL1 YEAR) AS next_Day FROM emp WHERE empno=7369

7.8.2 計算兩個時間列的差值

需求:對EMP表里員工KING和SMITH的hiredate入職時間差,這里單位是分鐘、小時、天、周、月、年.

解決方法:通過DATEDIFF函數來完成.

Mysql:

SELECT B.ename b_Ename,B.HIREDATEb_hiredate,A.ename a_Ename, A.HIREDATE a_hiredate, TIMESTAMPDIFF(MINUTE,A.HIREDATE,B.HIREDATE)minute_diff, TIMESTAMPDIFF(HOUR,A.HIREDATE,B.HIREDATE)hour_diff, DATEDIFF(B.HIREDATE,A.HIREDATE) day_diff, TIMESTAMPDIFF(WEEK,A.HIREDATE,B.HIREDATE)week_diff,TIMESTAMPDIFF(MONTH,A.HIREDATE,B.HIREDATE)month_diff, TIMESTAMPDIFF(YEAR,A.HIREDATE,B.HIREDATE) year_diff FROM emp A,emp B WHERE A.ename ='SMITH'AND B.ename ='KING'

執行結果:

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:

SELECT B.ename b_Ename,B.HIREDATE b_hiredate,A.ename a_Ename, A.HIREDATE a_hiredate ,DATEDIFF(MINUTE,A.HIREDATE,B.HIREDATE) minute_Diff ,DATEDIFF(HOUR,A.HIREDATE,B.HIREDATE) hour_Diff ,DATEDIFF(DAY,A.HIREDATE,B.HIREDATE) day_Diff ,DATEDIFF(WEEK,A.HIREDATE,B.HIREDATE) week_Diff ,DATEDIFF(MONTH,A.HIREDATE,B.HIREDATE) month_Diff ,DATEDIFF(YEAR,A.HIREDATE,B.HIREDATE) year_Diff FROM emp A,emp B WHERE A.ename = 'SMITH' AND B.ename = 'KING'

執行結果:

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:

SELECT B.ename b_Ename,B.HIREDATE b_hiredate,A.ename a_Ename, A.HIREDATE a_hiredate ,SUM(CASE WHEN DATENAME(DW,DATEADD(DAY,seq.pos,A.HIREDATE)) IN('星期六','星期日') THEN 0 ELSE 1 END) AS workday_Num FROM emp A,emp B,(SELECT number AS pos FROM master.[dbo].[spt_values] WHERE type = 'P') seq WHERE A.ename = 'SMITH' AND B.ename = 'KING' AND seq.pos <= DATEDIFF(DAY,A.HIREDATE,B.HIREDATE) GROUP BY B.ename ,B.HIREDATE,A.ename , A.HIREDATE

執行結果:

b_Ename

b_hiredate

a_Ename

a_hiredate

workday_Num

KING

1981-11-17

SMITH

1980-12-17

240


Mysql:

SELECT B.ename b_Ename,B.HIREDATEb_hiredate,A.ename a_Ename, A.HIREDATE a_hiredate, SUM(CASE WHEN DATE_FORMAT(DATE_ADD(A.hiredate,INTERVAL pos DAY),'%w') IN (0,6) THEN 0 ELSE 1 END) AS workday_Num FROM emp A,emp B,(SELECT i-1 AS pos FROM tb_incr) seq WHERE A.ename ='SMITH'AND B.ename ='KING'AND seq.pos <=DATEDIFF(B.HIREDATE,A.HIREDATE) GROUPBY B.ename,B.HIREDATE,A.ename , A.HIREDATE

執行結果:

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:

SELECT B.ename b_Ename,B.HIREDATE b_hiredate,A.ename a_Ename, A.HIREDATE a_hiredate ,DATEADD(DAY,seq.pos,A.HIREDATE) AS date_Seq ,CASE DATEPART(DW,DATEADD(DAY,seq.pos,A.HIREDATE)) WHEN 1 THEN '星期日'WHEN 2 THEN '星期一'WHEN 3 THEN '星期二'WHEN 4 THEN '星期三'WHEN 5 THEN '星期四'WHEN 6 THEN '星期五'WHEN 7 THEN '星期六' END ASweekno FROM emp A,emp B,(SELECT number AS pos FROM master.[dbo].[spt_values] WHERE type = 'P') seq WHERE A.ename = 'SMITH' AND B.ename = 'KING' AND seq.pos <= DATEDIFF(DAY,A.HIREDATE,B.HIREDATE)-- 或者借助datename函數 SELECT B.ename b_Ename,B.HIREDATE b_hiredate,A.ename a_Ename, A.HIREDATE a_hiredate ,DATEADD(DAY,seq.pos,A.HIREDATE) AS date_Seq ,DATENAME(DW,DATEADD(DAY,seq.pos,A.HIREDATE)) AS weekno FROM emp A,emp B,(SELECT number AS pos FROM master.[dbo].[spt_values] WHERE type = 'P') seq WHERE A.ename = 'SMITH' AND B.ename = 'KING' AND seq.pos <= DATEDIFF(DAY,A.HIREDATE,B.HIREDATE)

執行結果:

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:

SELECT B.ename b_Ename,B.HIREDATEb_hiredate,A.ename a_Ename, A.HIREDATE a_hiredate, CASE DATE_FORMAT(DATE_ADD(A.hiredate,INTERVAL pos DAY),'%w') WHEN 0 THEN '周日' WHEN 1 THEN '星期一' WHEN 2 THEN '星期二' WHEN 3 THEN '星期三' WHEN 4 THEN '星期四' WHEN 5 THEN '星期五' WHEN 6 THEN '星期六' END AS weekno FROM emp A,emp B,(SELECT i-1AS pos FROM tb_incr) seq WHERE A.ename ='SMITH'AND B.ename ='KING'AND seq.pos <=DATEDIFF(B.HIREDATE,A.HIREDATE)

結果同上.

7.8.5 計算時間列所在年的周序號

需求:對EMP表里員工KING和SMITH的hiredate入職時間差,基于生成的日期算每天所在的周,相對于年.

解決方法:通過DATE_FORMAT函數來完成.

Mysql:

SELECT B.ename b_Ename,B.HIREDATEb_hiredate,A.ename a_Ename, A.HIREDATE a_hiredate ,DATE_ADD(A.hiredate,INTERVAL pos DAY) date_Seq ,DATE_FORMAT(DATE_ADD(A.hiredate,INTERVAL pos DAY),'%U') AS weekno_Year FROM emp A,emp B,(SELECT i-1AS pos FROM tb_incr) seq WHERE A.ename ='SMITH'AND B.ename ='KING'AND seq.pos <=DATEDIFF(B.HIREDATE,A.HIREDATE)

執行結果:

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:

SELECT B.ename b_Ename,B.HIREDATE b_hiredate,A.ename a_Ename, A.HIREDATE a_hiredate ,DATEADD(DAY,seq.pos,A.HIREDATE) AS date_Seq ,DATEPART(WK,DATEADD(DAY,seq.pos,A.HIREDATE)) AS weekno_Year FROM emp A,emp B,(SELECT number AS pos FROM master.[dbo].[spt_values] WHERE type = 'P') seq WHERE A.ename = 'SMITH' AND B.ename = 'KING' AND seq.pos <= DATEDIFF(DAY,A.HIREDATE,B.HIREDATE)

執行結果:

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

...

...

...

...

...

...

總結

以上是生活随笔為你收集整理的SQL基础操作_7_时间运算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。