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;
T
-
4
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 |