时间日期函数整理

一. SQL Server

1.1. 时间类型
数据类型 格式 范围 精确度
time hh:mm:ss[.nnnnnnn] 00:00:00.0000000 到 23:59:59.9999999 100 纳秒
date YYYY-MM-DD 0001-01-01 到 9999-12-31 1 天
smalldatetime YYYY-MM-DD hh:mm:ss 1900-01-01 到 2079-06-06 1 分钟
datetime YYYY-MM-DD hh:mm:ss[.nnn] 1753-01-01 到 9999-12-31 0.00333 秒
1.2. 日期函数

(1) getdate() 获取当前时间

select getdate()
 2018-07-04 08:57:55.587
select convert(varchar(100),getdate(),24) 
 15:51:28  
select convert(varchar(100),getdate(),23) 
 2017-02-25  
select convert(varchar(100),getdate(),120) 
 2017-02-25 15:50:32  

(2) dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值

select dateadd(day,2,'2004-10-15')   
 2004-10-17 00:00:00.000

(3) datediff 返回跨两个指定日期的日期和时间边界数

select datediff(day,'2004-09-01','2004-09-18') 
 17

(4) datepart 返回代表指定日期的指定日期部分的整数

SELECT DATEPART(month, '2004-10-15') 
 10

(5) 字符串转换为时间

SELECT convert(datetime,'2017-12-12 00:00:01', 20)
 2017-12-12 00:00:01.000

二. MySQL

2.1. 时间类型
类型 大小(字节) 范围 格式
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS
YEAR 1 1901/2155 YYYY
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS
TIMESTAMP 4 1970-01-01 00:00:00/2037 年某时 YYYYMMDD HHMMSS
2.2. 日期函数

(1) now() 获取当前时间

 select now()
  2008-08-08 22:28:21  

(2) 获得当前时间戳

select current_timestamp, current_timestamp()
 +---------------------+---------------------+
| current_timestamp | current_timestamp() |
+---------------------+---------------------+
| 2008-08-09 23:22:24 | 2008-08-09 23:22:24 |
+---------------------+---------------------+  

(3) 日期/时间转换为字符串

 select date_format('2008-08-08 22:23:01', '%Y-%y-%d %h:%i:%s')
  2008-08-08 10:23:01  

(4) 字符串转换为日期

select str_to_date('08/09/2008', '%m/%d/%Y')
 2008-08-09
select str_to_date('08/09/08' , '%m/%d/%y')
 2008-08-09
select str_to_date('08.09.2008', '%m.%d.%Y')
 2008-08-09
select str_to_date('08:09:30', '%h:%i:%s')
 08:09:30
select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s')
 2008-08-09 08:09:30

(5) adddate()

select date_add(now(), interval 1 day);
select date_add(now(), interval 1 hour);
select date_add(now(), interval 1 minute);
select date_add(now(), interval '01:15:30' hour_second);
select date_add(now(), interval '1 01:15:30' day_second);

(6) date_sub()

select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second)
1997-12-30 22:58:59

(7) datediff

select datediff('2008-08-08', '2008-08-01')
 7
 select timediff('2008-08-08 10:00:00','2008-08-08 19:00:00')
 -09:00:00

三. Oracle

3.1. 时间类型

date类型存储数据的格式为年月日时分秒,可以精确到秒。

timestamp类型存储数据的格式为年月日时分秒,可以精确到纳秒(9位),但默认存储的精度为微秒(6)。

3.2. 日期函数

(1) 获取当前时间

SELECT SYSDATE FROM DUAL; --date
SELECT SYSTIMESTAMP FROM DUAL; --timestamp

(2) 日期和字符转换函数用法(to_date,to_char)

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;--日期转化为字符串   
select to_char(sysdate,'yyyy') as nowYear from dual;--获取时间的年   
select to_char(sysdate,'mm') as nowMonth from dual;--获取时间的月   
select to_char(sysdate,'dd') as nowDay from dual;--获取时间的日

select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual   

(3) 减去时长

select sysdate,sysdate - interval '7' MINUTE from dual;--当前时间减去7分钟的时间 
select sysdate - interval '7' hour from dual;--当前时间减去7小时的时间 
select sysdate - interval ’7’ day from dual; --当前时间减去7天的时间 
select sysdate,sysdate - interval '7' month from dual;--当前时间减去7月的时间 

(4) trunc[截断到最接近的日期,单位为天] ,返回的是日期类型

   select sysdate S1,                     
     trunc(sysdate) S2,       --返回当前日期,无时分秒
     trunc(sysdate,'year') YEAR,  --返回当前年的1月1日,无时分秒
     trunc(sysdate,'month') MONTH ,  --返回当前月的1日,无时分秒
     trunc(sysdate,'day') DAY   --返回当前星期的星期天,无时分秒
   from dual

附录:

https://www.cnblogs.com/ggjucheng/p/3352280.html
http://www.codes51.com/itwd/1504275.html
https://www.cnblogs.com/aipan/p/8080151.html

posted @ 2018-07-04 14:08  Xuty  阅读(319)  评论(0编辑  收藏  举报