时间日期函数整理

一. SQL Server
1.1. 时间类型
数据类型格式范围精确度
timehh:mm:ss[.nnnnnnn]00:00:00.0000000 到 23:59:59.9999999100 纳秒
dateYYYY-MM-DD0001-01-01 到 9999-12-311 天
smalldatetimeYYYY-MM-DD hh:mm:ss1900-01-01 到 2079-06-061 分钟
datetimeYYYY-MM-DD hh:mm:ss[.nnn]1753-01-01 到 9999-12-310.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. 时间类型
类型大小(字节)范围格式
DATE31000-01-01/9999-12-31YYYY-MM-DD
TIME3'-838:59:59'/'838:59:59'HH:MM:SS
YEAR11901/2155YYYY
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS
TIMESTAMP41970-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

转载于:https://www.cnblogs.com/xuty/p/9262985.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值