一. 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