天天看点

SQL Server 常用日期函数DateDiff()、GetDate() 以及oracle 日期常用函數 (SYSDATE、日期格式)等详解

SQL Server 常用日期函数DateDiff()、GetDate() 以及oracle 日期常用函數 (SYSDATE、日期格式)等详解

一、GetDate() 函数

作用:

GetDate() 函数用于返回当前的时间和日期,返回值样式举例:2013/10/29 9:11:05

语法:

GetDate()

ASP 实例:

<%
'数据库链接定义省略
sql="SELECT GetDate() AS CurrentDateTime"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.open sql, conn, 1, 1
if not(rs.bof and rs.eof) then
	Response.Write rs("CurrentDateTime")
end if
rs.close
set rs=nothing
%>
           

二、DateDiff() 函数

作用:

DateDiff() 函数返回“开始日期”与“结束日期”之间的差值(如:年、天数等)。

返回值类型:

DateDiff() 函数返回值类型为:Long(长整型),范围从 -2,147,483,648 到 2,147,483,647。

语法:

DateDiff(参数 , 开始日期 , 结束日期)

参数取值:  

说明 参数写法 参数简写 最大
Year yy  
季度 Quarter q  
Month m  
Week wk  
Day d  
小时 Hour hh  
分钟 Minute mi  
Second s 68年
毫秒 Millisecond ms 24天20小时31分23.648秒

ASP 实例:

<%
'数据库链接定义省略
sql="SELECT DateDiff(ms,'2013-1-1','2013-1-25 20:31:23.648') AS DiffVal"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.open sql, conn, 1, 1
if not(rs.bof and rs.eof) then
	Response.Write rs("DiffVal")
end if
rs.close
set rs=nothing
'输出:2147483646(毫秒)

sql="SELECT DateDiff(Week,'2013-10-20','2014-10-20') AS DiffVal"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.open sql, conn, 1, 1
if not(rs.bof and rs.eof) then
	Response.Write "<br>"&rs("DiffVal")
end if
rs.close
set rs=nothing
'输出:52(周)

sql="SELECT DateDiff(d,'2013-10-20',GetDate()) AS DiffVal"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.open sql, conn, 1, 1
if not(rs.bof and rs.eof) then
	Response.Write "<br>"&rs("DiffVal")
end if
rs.close
set rs=nothing
'当前系统日期为:2013-10-29,输出:9(天)
%>
           

三、DateAdd() 函数

作用:

DateAdd() 函数用于在指定日期增加(或减去)参数设定的间隔。

语法: 

DateAdd(参数 , 加(减)间隔 , 指定日期) 

参数取值:

说明 参数写法 参数简写
Year yy
季度 Quarter q
Month m
Week wk
Day d
小时 Hour hh
分钟 Minute mi
Second s
毫秒 Millisecond ms

ASP 实例:

<%
'数据库链接定义省略
sql="SELECT DateAdd(day,5,'2013-1-1') AS DateAddVal"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.open sql, conn, 1, 1
if not(rs.bof and rs.eof) then
	Response.Write rs("DateAddVal")
end if
rs.close
set rs=nothing
'输出:2013/1/6

sql="SELECT DateAdd(s,10,'2013-1-1') AS DateAddVal"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.open sql, conn, 1, 1
if not(rs.bof and rs.eof) then
	Response.Write rs("DateAddVal")
end if
rs.close
set rs=nothing
'输出:2013/1/1 0:00:10

sql="SELECT DateAdd(mi,-1,'2013-1-1') AS DateAddVal"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.open sql, conn, 1, 1
if not(rs.bof and rs.eof) then
	Response.Write rs("DateAddVal")
end if
rs.close
set rs=nothing
'输出:2012/12/31 23:59:00
%>
           

四、Convert() 函数

作用:

Convert() 函数用来将日期转换为指定样式的新数据类型。

语法:

Convert(数据类型(长度) , 需转换日期 , 样式参数)

常用参数取值:

样式参数 样式说明 长度
101  mm/dd/yyyy 10
110  mm-dd-yyyy 10
103  dd/mm/yyyy 10
105  dd-mm-yyyy 10
111  yyyy/mm/dd 10
112  yyyymmdd 8
108  hh:mm:ss 8
114  hh:mm:ss:mmm 12
120  yyyy-mm-dd hh:mm:ss 19
121  yyyy-mm-dd hh:mm:ss.mmm 23

 ASP 实例:

<%
'数据库链接定义省略
sql="SELECT Convert(VarChar(19),GetDate(),120)  AS DateConvert"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.open sql, conn, 1, 1
if not(rs.bof and rs.eof) then
	Response.Write rs("DateConvert")
end if
rs.close
set rs=nothing
'输出:2013-10-29 11:07:44 

sql="SELECT Convert(VarChar(12),GetDate(),114)  AS DateConvert"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.open sql, conn, 1, 1
if not(rs.bof and rs.eof) then
	Response.Write "<br>"&rs("DateConvert")
end if
rs.close
set rs=nothing
'输出:11:11:14:563
%>
           

五、DatePart() 函数

作用:

DatePart() 函数用来返回日期(时间)参数指定的部份,如年、月、日、时、分、秒等。

语法:

DatePart(参数 , 日期)

参数取值:

说明 参数写法 参数简写
Year yy
季度 Quarter q
Month m
Week wk
Day d
小时 Hour hh
分钟 Minute mi
Second s
毫秒 Millisecond ms

 ASP 实例:

<%
'数据库链接定义省略
sql="SELECT DatePart(mi,'2013-10-01 23:12:09.456')  AS PartDate"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.open sql, conn, 1, 1
if not(rs.bof and rs.eof) then
	Response.Write rs("PartDate")
end if
rs.close
set rs=nothing
'输出:12(分钟部分)

sql="SELECT DatePart(ms,'2013-10-01 23:12:09.456')  AS PartDate"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.open sql, conn, 1, 1
if not(rs.bof and rs.eof) then
	Response.Write rs("PartDate")
end if
rs.close
set rs=nothing
'输出:457(毫秒部分,有误差)
%>
           

ORACLE时间函数(SYSDATE)深入理解

加法 

select sysdate,add_months(sysdate,12) from dual; --加1年 

select sysdate,add_months(sysdate,1) from dual; --加1月 

select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期 

select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual; --加1天 

select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --加1小时 

select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1分钟 

select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1秒 

减法 

select sysdate,add_months(sysdate,-12) from dual; --减1年 

select sysdate,add_months(sysdate,-1) from dual; --减1月 

select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual; --减1星期 

select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual; --减1天 

select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --减1小时 

select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1分钟 

select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1秒 

ORACLE时间函数(SYSDATE)简析 

1:取得当前日期是本月的第几周 

SQL> select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual; 

TO_CHAR(SYSDATE,'YY 

------------------- 

20030327 4 18:16:09 

SQL> select to_char(sysdate,'W') from dual; 

2:取得当前日期是一个星期中的第几天,注意星期日是第一天 

SQL> select sysdate,to_char(sysdate,'D') from dual; 

SYSDATE T 

--------- - 

27-MAR-03 5 

  类似: 

select to_char(sysdate,'yyyy') from dual; --年 

select to_char(sysdate,'Q' from dual; --季 

select to_char(sysdate,'mm') from dual; --月 

select to_char(sysdate,'dd') from dual; --日 

ddd 年中的第几天 

WW 年中的第几个星期 

W 该月中第几个星期 

D 周中的星期几 

hh 小时(12) 

hh24 小时(24) 

Mi 分 

ss 秒 

3:取当前日期是星期几中文显示: 

SQL> select to_char(sysdate,'day') from dual; 

TO_CHAR(SYSDATE,'DAY') 

---------------------- 

星期四 

4:如果一个表在一个date类型的字段上面建立了索引,如何使用 

alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS' 

5: 得到当前的日期 

select sysdate from dual; 

6: 得到当天凌晨0点0分0秒的日期 

select trunc(sysdate) from dual; 

-- 得到这天的最后一秒 

select trunc(sysdate) + 0.99999 from dual; 

-- 得到小时的具体数值 

select trunc(sysdate) + 1/24 from dual; 

select trunc(sysdate) + 7/24 from dual; 

7.得到明天凌晨0点0分0秒的日期 

select trunc(sysdate+1) from dual; 

select trunc(sysdate)+1 from dual; 

8: 本月一日的日期 

select trunc(sysdate,'mm') from dual; 

9:得到下月一日的日期 

select trunc(add_months(sysdate,1),'mm') from dual; 

10:返回当前月的最后一天? 

select last_day(sysdate) from dual; 

select last_day(trunc(sysdate)) from dual; 

select trunc(last_day(sysdate)) from dual; 

select trunc(add_months(sysdate,1),'mm') - 1 from dual; 

11: 得到一年的每一天 

select trunc(sysdate,'yyyy')+ rn -1 date0 

from 

(select rownum rn from all_objects 

where rownum<366); 

12:今天是今年的第N天 

SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL; 

13:如何在给现有的日期加上2年 

select add_months(sysdate,24) from dual; 

14:判断某一日子所在年分是否为润年 

select decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','闰年','平年') from dual; 

15:判断两年后是否为润年 

select decode(to_char(last_day(trunc(add_months(sysdate,24),'y')+31),'dd'),'29','闰年','平年') from dual; 

16:得到日期的季度 

select ceil(to_number(to_char(sysdate,'mm'))/3) from dual; 

select to_char(sysdate, 'Q') from dual; 分类:  Oracle数据库

ORACLE时间格式

SYSDATE  
2 --◎ 可得到目前系統的時間    
3
4   ex.     
5     select sysdate from dual;  
6
7     sysdate     
8     ----------     
9     20-SEP-07  
10
11 常用之日期格式  
12
13 日期格式                 說明  
14 ------------------------------------------------------------------------  
15 YYYY/MM/DD              -- 年/月/日   
16 YYYY                    -- 年(4位)  
17 YYY                     -- 年(3位)  
18 YY                      -- 年(2位)  
19 MM                      -- 月份  
20 DD                      -- 日期  
21 D                       -- 星期  
22                             -- 星期日 = 1  星期一 = 2 星期二 = 3  
23                         -- 星期三 = 4  星期四 = 5 星期五 = 6 星期六 = 7  
24
25 DDD                     -- 一年之第幾天  
26 WW                      -- 一年之第幾週  
27 W                       -- 一月之第幾週  
28 YYYY/MM/DD HH24:MI:SS   -- 年/月/日 時(24小時制):分:秒  
29 YYYY/MM/DD HH:MI:SS     -- 年/月/日 時(非24小時制):分:秒  
30 J                       -- Julian day,Bc 4712/01/01 為1  
31 RR/MM/DD                -- 公元2000問題   
32                -- 00-49 = 下世紀;50-99 = 本世紀  
33 ex.  
34 select to_char(sysdate,'YYYY/MM/DD') FROM DUAL;             -- 2007/09/20  
35 select to_char(sysdate,'YYYY') FROM DUAL;                   -- 2007  
36 select to_char(sysdate,'YYY') FROM DUAL;                    -- 007  
37 select to_char(sysdate,'YY') FROM DUAL;                     -- 07  
38 select to_char(sysdate,'MM') FROM DUAL;                     -- 09  
39 select to_char(sysdate,'DD') FROM DUAL;                     -- 20  
40 select to_char(sysdate,'D') FROM DUAL;                      -- 5  
41 select to_char(sysdate,'DDD') FROM DUAL;                    -- 263  
42 select to_char(sysdate,'WW') FROM DUAL;                     -- 38  
43 select to_char(sysdate,'W') FROM DUAL;                      -- 3  
44 select to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') FROM DUAL;  -- 2007/09/20 15:24:13  
45 select to_char(sysdate,'YYYY/MM/DD HH:MI:SS') FROM DUAL;    -- 2007/09/20 03:25:23  
46 select to_char(sysdate,'J') FROM DUAL;                      -- 2454364  
47 select to_char(sysdate,'RR/MM/DD') FROM DUAL;               -- 07/09/20