sql中的时间函数

sql中的时间函数_第1张图片
![

sql中的时间函数_第2张图片
sql中的时间函数_第3张图片

sql中的时间函数_第4张图片

1:
SQL 标量函数-----日期函数 day() 、month()、year()
select day(createtime) from life_unite_product --取时间字段的天值

select month(createtime) from life_unite_product --取时间字段的月值

select year(createtime) from life_unite_product --取时间字段的年值

select datepart(yy,createtime) from life_unite_product --取时间字段的年值

select datepart(qq,createtime) from life_unite_product --取时间字段的季度值

select datepart(mm,createtime) from life_unite_product --取时间字段的月值

select datepart(dy,createtime) from life_unite_product --取时间字段是那年的第几天

select datepart(dd,createtime) from life_unite_product --取时间字段的天值

select datepart(wk,createtime) from life_unite_product --取时间字段是那年的第几个星期

select datepart(dw,createtime) from life_unite_product --取时间字段是那年的那个星期的第几个工作日(工作日从星期日开算)

select datepart(hh,createtime) from life_unite_product --取时间字段的小时值

select datepart(mi,createtime) from life_unite_product --取时间字段的分钟值

select datepart(ss,createtime) from life_unite_product --取时间字段的秒值

select datepart(ms,createtime) from life_unite_product --取时间字段的毫秒值

select dateadd(yy,-1,createtime) from life_unite_product ----取时间字段(年份被减1了)

select dateadd(mm,3,createtime) from life_unite_product ----取时间字段(月份被加3了)

select dateadd(dd,1,createtime) from life_unite_product ----取时间字段(日被加1了)

select DATEDIFF(yy,createtime,getdate()) from life_unite_product --与当前日期的年份差

select DATEDIFF(mm,createtime,getdate()) from life_unite_product --与当前日期的月份差

select DATEDIFF(dd,createtime,getdate()) from life_unite_product --与当前日期的日数差

select DATEDIFF(mi,createtime,getdate()) from life_unite_product --与当前日期的分钟数差

select datename(yy,createtime) from life_unite_product --取时间字段的年值

select datename(mm,createtime) from life_unite_product --取时间字段的月值

select datename(dd,createtime) from life_unite_product --取时间字段的天值

select getdate() --取当前时间

sql中的时间函数_第5张图片
2;

  • **
  • GETDATE()**

GETDATE()函数用于返回当前数据库系统的日期和时间,返回值的类型为datetime。返回值舍入到最近的秒小数部分,精度为.333秒数据库十七偏移量不包含在内。

SELECT GETDATE()

GETUTCDATE()

GETUTCDATE()函数返回当前UTC(世界标准时间)日期值,即格林尼治时间(GMT)

SELECT GETUTCDATE()

  • YEAR()

YEAR()函数以int数据类型的格式返回特定日期的年度信息。其语法格式为YEAR(date数据)。

SELECT YEAR(GETDATE())

注意:函数之间只要符合语法规范是可以嵌套的。

  • MONTH()

MONTH()函数以int数据类型的格式返回特定日期的月份信息。其语法格式为MONTH(date数据)。

SELECT MONTH(GETDATE())

  • DAY()

DAY()函数以int数据类型的格式返回特定日期的天数信息。其语法格式为DAY(date数据)。

SELECT DAY(GETDATE())

DATEPART(dp,d)

DATEPART(dp,d)函数返回指定日期中相应的部分的整数值。
DATEPART语法格式

DATEPART( datepart , date数据 )

  • datepart取值

年度 YEAR、YYYY、YY

SELECT DATEPART(YEAR,GETDATE())
– 2019

月份 MONTH、MM、M

SELECT DATEPART(MONTH,GETDATE())
– 2
日期 DAY、DD、D

SELECT DATEPART(DAY,GETDATE())
– 14
周 WEEK、WK、WW

SELECT DATEPART(WEEK,GETDATE())
– 7 (一年中的第7周)

  • 每周星期几 WEEKDAY、DW

SELECT DATEPART(WEEKDAY,GETDATE())
– 5 (是从星期日开始计算往后的第几天)
季度 QUARTER、QQ、Q

SELECT DATEPART(QUARTER,GETDATE())
– 1
一年中第几天 DAYOFYEAR、DY、Y

SELECT DATEPART(DAYOFYEAR,GETDATE())
– 45
小时 HOUR、HH

SELECT DATEPART(HOUR,GETDATE())
– 23 (晚上11点还在写公众号的苦逼小编)
分钟 MINUTE、MI、N

SELECT DATEPART(MINUTE,GETDATE())
– 11
秒 SECOND、SS、SS

SELECT DATEPART(SECOND,GETDATE())
– 45
毫秒 MILLISECOND、MS

SELECT DATEPART(MILLISECOND,GETDATE())
– 120

  • DATENAME(dp,d)

DATENAME(dp,d)函数返回指定日期中相应的部分的字符串,用法与DATEPART类似。

SELECT DATENAME(MONTH,GETDATE())
– 02

SELECT DATENAME(WEEKDAY,GETDATE())
– 星期四

SELECT DATENAME(DAY,GETDATE())
– 14

SELECT DATENAME(WEEK,GETDATE())
– 7 一年中的第7周

SELECT DATENAME(DAYOFYEAR,GETDATE())
– 45 一年中的第45天

DATEADD(dp,num,d)

DATEADD(dp,num,d)函数用于执行日期的加运算,返回指定日期值加上一个时间段后的新日期。dp指定日期中进行加法运算的部分值,

例如:YEARMONTH,DAY,HOUR,MINUTE,SECOND,MILLISECOND等,num指定与dp相加的值,如果该值为非整数值,将舍弃该值的小数部分,d为执行加法运算的日期。

  • DATEADD语法格式

dateadd (datepart,numer,date数据)
numer:用于与detepart相加的值。如果指定了非整数值,则将舍弃该值的小数部分。
date数据:一个用于解析为time、date、smalldatetime、datetime、datetime2、或datetimeoffset值的表达式、列表达式、用户定义的变量或字符串文字。
datepart:时间部分

SELECT DATEADD(YEAR,2,GETDATE())
– 2021-02-14 23:17:52.550 (年份往后增加2年)

SELECT DATEADD(MONTH,2,GETDATE())
– 2019-04-14 23:17:52.550 (月份往后增加2个月)

SELECT DATEADD(DAY,2,GETDATE())
– 2019-02-16 23:17:52.550 (日期往后增加2天)

SELECT DATEADD(YEAR,-2,GETDATE())
– 2017-02-14 23:37:09.477 (年份往前减少2年)

SELECT DATEADD(MONTH,-2,GETDATE())
– 2018-12-14 23:37:09.477 (月份往前减少2个月)

SELECT DATEADD(DAY,-2,GETDATE())
– 2019-02-12 23:37:09.477 (日期往前减少2天)

  • DATEDIFF(dp,stardate,enddate)

datediff函数将两个特定的日期数据相减,得到的结果可以按照detepart指定的格式返回特定的数据。
语法格式
datediff(datepart,startdate,enddate)
执行中将使用enddate减以startdate的值,如果startdate晚于enddate将返回负值。执行结果如果超出整数范围将提示错误。

SELECT DATEDIFF(YEAR,‘2018-5-19’,‘2019-2-14’)
– 1

SELECT DATEDIFF(YEAR,‘2020-5-19’,‘2019-2-14’)
– -1

SELECT DATEDIFF(MONTH,‘2018-2-14’,‘2019-8-11’)
– 18

SELECT DATEDIFF(MONTH,‘2020-2-14’,‘2019-8-11’)
– -6

3:

(1)修改日期显示格式

SCOTT@SDEDU> alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss’;

Session altered.

(2)显示当前日期的零点

SCOTT@SDEDU> select trunc(sysdate,‘dd’) from dual;

TRUNC(SYSDATE,‘DD’)


2019-05-24 00:00:00

(3)显示本月第一天

SCOTT@SDEDU> select trunc(sysdate,‘mm’) from dual;

TRUNC(SYSDATE,‘MM’)


2019-05-01 00:00:00

(4)显示本月第二天

SCOTT@SDEDU> select trunc(sysdate,‘mm’)+1 from dual;

TRUNC(SYSDATE,‘MM’)


2019-05-02 00:00:00

(5)显示下一个月的第一天

SCOTT@SDEDU> select trunc(sysdate+30,‘mm’) from dual;

TRUNC(SYSDATE+30,'M


2019-06-01 00:00:00

(6)显示本年的第一天

SCOTT@SDEDU> select trunc(sysdate,‘yyyy’) from dual;

TRUNC(SYSDATE,'YYYY


2019-01-01 00:00:00

日期操作

日期操作ADD_MONTHS(日期,数字) 在指定的日期上加入指定的月数,求出新的日期

日期操作 MONTHS_BETWEEN(日期1,日期2) 求出两个日期间的月份数。

(7)显示所有雇员在被雇佣三个月之后的日期

SCOTT@SDEDU> select empno,ename,sal,hiredate,add_months(hiredate,3) from emp;

EMPNO ENAME SAL HIREDATE

ADD_MONTHS(HIREDATE



7369 SMITH 800 1980-12-17 00:00:00

1981-03-17 00:00:00

7499 ALLEN 1600 1981-02-20 00:00:00

1981-05-20 00:00:00

7521 WARD 1250 1981-02-22 00:00:00

1981-05-22 00:00:00

7566 JONES 2975 1981-04-02 00:00:00

1981-07-02 00:00:00

7654 MARTIN 1250 1981-09-28 00:00:00

1981-12-28 00:00:00

7698 BLAKE 2850 1981-05-01 00:00:00

1981-08-01 00:00:00

7782 CLARK 2450 1981-06-09 00:00:00

1981-09-09 00:00:00

7788 SCOTT 3000 1987-04-19 00:00:00

1987-07-19 00:00:00

7839 KING 5000 1981-11-17 00:00:00

1982-02-17 00:00:00

7844 TURNER 1500 1981-09-08 00:00:00

1981-12-08 00:00:00

7876 ADAMS 1100 1987-05-23 00:00:00

1987-08-23 00:00:00

7900 JAMES 950 1981-12-03 00:00:00

1982-03-03 00:00:00

7902 FORD 3000 1981-12-03 00:00:00

1982-03-03 00:00:00

7934 MILLER 1300 1982-01-23 00:00:00

1982-04-23 00:00:00

14 rows selected.

(8)求今年的最后一天

SCOTT@SDEDU> select add_months(trunc(sysdate,‘yyyy’),12)-1 from dual;

ADD_MONTHS(TRUNC(SY


2019-12-31 00:00:00

解题思路:2019+12月=2020.01.01-1天=2019.12.31

(9)求本月的最后一天

SCOTT@SDEDU> select add_months(trunc(sysdate,‘mm’),1)-1 from dual;

ADD_MONTHS(TRUNC(SY


2019-05-31 00:00:00

(10)查询出每个雇员的编号、姓名、雇佣日期、已雇佣的年数

SCOTT@SDEDU> select empno,ename,hiredate,

2 trunc(months_between(sysdate,hiredate)/12) from emp;

EMPNO ENAME HIREDATE

TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12)



7369 SMITH 1980-12-17 00:00:00 38

7499 ALLEN 1981-02-20 00:00:00 37

7521 WARD 1981-02-22 00:00:00 37

7566 JONES 1981-04-02 00:00:00 37

7654 MARTIN 1981-09-28 00:00:00 37

7698 BLAKE 1981-05-01 00:00:00 37

7782 CLARK 1981-06-09 00:00:00 37

7788 SCOTT 1987-04-19 00:00:00 31

7839 KING 1981-11-17 00:00:00 37

7844 TURNER 1981-09-08 00:00:00 37

7876 ADAMS 1987-05-23 00:00:00 31

7900 JAMES 1981-12-03 00:00:00 37

7902 FORD 1981-12-03 00:00:00 37

7934 MILLER 1982-01-23 00:00:00 36

14 rows selected.

(11)查询出每个雇员的编号、姓名、雇佣日期、已雇佣的年数、月数(几年零几月)

SCOTT@SDEDU> select empno,ename,hiredate,

2 trunc(months_between(sysdate,hiredate)/12),

3 trunc(mod(months_between(sysdate,hiredate),12)) from emp;

EMPNO ENAME HIREDATE


TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12)


TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,HIREDATE),12))


7369 SMITH 1980-12-17 00:00:00 38 0

7499 ALLEN 1981-02-20 00:00:00 37 10

7521 WARD 1981-02-22 00:00:00 37 10

7566 JONES 1981-04-02 00:00:00 37 8

………………………………

7876 ADAMS 1987-05-23 00:00:00 31 7

7900 JAMES 1981-12-03 00:00:00 37 0

7902 FORD 1981-12-03 00:00:00 37 0

7934 MILLER 1982-01-23 00:00:00 36 11

14 rows selected.

说明:工作的总月数,工作几年零几个月=对工作总月数除以12取余。

解题图解如下:

months_between(sysdate,hiredate):先得到所有的时间,这个时间不是整数。

add_months(hiredate,months_between(sysdate,hiredate)):然后使用add_months得到所有的整数时间。(回炉重造只为取整……)

sysdate-add_months(hire……:再用当前的时间减去上一步得到的整数时间,得到的结果是非整数。

trunc(……:最后用该函数得到整数部分,即天数。

你可能感兴趣的:(sql)