/**
*
*@paramanObject:thisWeek=本周;nextWeek=下周
*@returnmonday
*/
publicStringgetMonday(StringanObject){
Stringsql="";
Stringtime="";
if("thisWeek".equals(anObject))
sql="Selectcasewhento_char(sysdate,'D')=1thento_char(sysdate-to_char(sysdate,'D')-5,'yyyy-mm-dd')elseto_char(sysdate-to_char(sysdate,'D')+2,'yyyy-mm-dd')endfromdual";
elseif("nextWeek".equals(anObject))
sql="Selectcasewhento_char(sysdate,'D')=1thento_char(sysdate-to_char(sysdate,'D')+2,'yyyy-mm-dd')elseto_char(sysdate-to_char(sysdate,'D')+9,'yyyy-mm-dd')endfromdual";
elseif("lastWeek".equals(anObject))//上周
sql="Selectcasewhento_char(sysdate,'D')=1thento_char(sysdate-to_char(sysdate,'D')-12,'yyyy-mm-dd')elseto_char(sysdate-to_char(sysdate,'D')-5,'yyyy-mm-dd')endfromdual";
time=this.getToCharSysdateParameter(sql);
returntime;
}
/**
*
*@paramanObject:thisWeek=本周;nextWeek=下周;lastWeek=上周
*@returnsunday
*/
publicStringgetSunday(StringanObject){
Stringsql="";
Stringtime="";
if("thisWeek".equals(anObject))//本周
sql="Selectto_char(sysdate,'D'),casewhento_char(sysdate,'D')=1thento_char(sysdate-to_char(sysdate,'D')+1,'yyyy-mm-dd')elseto_char(sysdate-to_char(sysdate,'D')+8,'yyyy-mm-dd')endfromdual";
elseif("nextWeek".equals(anObject))//下周
sql="Selectto_char(sysdate,'D'),casewhento_char(sysdate,'D')=1thento_char(sysdate-to_char(sysdate,'D')+8,'yyyy-mm-dd')elseto_char(sysdate-to_char(sysdate,'D')+15,'yyyy-mm-dd')endfromdual";
elseif("lastWeek".equals(anObject))//上周
sql="Selectcasewhento_char(sysdate,'D')=1thento_char(sysdate-to_char(sysdate,'D')-6,'yyyy-mm-dd')elseto_char(sysdate-to_char(sysdate,'D')+1,'yyyy-mm-dd')endfromdual";
time=this.getToCharSysdateParameter(sql);
returntime;
}
--*****************
多种日期格式:
YYYY:四位表示的年份
YYY,YY,Y:年份的最后三位、两位或一位,缺省为当前世纪
MM:01~12的月份编号
MONTH:九个字符表示的月份,右边用空格填补
MON:三位字符的月份缩写
WW:一年中的星期
D:星期中的第几天
DD:月份中的第几天
DDD:年所中的第几天
DAY:九个字符表示的天的全称,右边用空格补齐
HH,HH12:一天中的第几个小时,12进制表示法
HH24:一天中的第几个小时,取值为00~23
MI:一小时中的分钟
SS:一分钟中的秒
SSSSS:从午夜开始过去的秒数
设置日期语言
ALTERSESSIONSETNLS_DATE_LANGUAGE='AMERICAN';
一。基本运算部分
A)to_char函数
1.年的运算
1.1Y或YY或YYY年的最后一位,两位或三位,YYYY四位年份,IYYYISO标准的四位年份
SQL>Selectto_char(sysdate,'Y'),to_char(sysdate,'YY'),to_char(sysdate,'YYY'),to_char(sysdate,'YYYY'),TO_CHAR(SYSTIMESTAMP,'IYYY')fromdual;
TO_CHAR(SYSDATE,'Y')TO_CHAR(SYSDATE,'YY')TO_CHAR(SYSDATE,'YYY')TO_CHAR(SYSDATE,'YYYY')TO_CHAR(SYSTIMESTAMP,'IYYY')
------------------------------------------------------------------------------------------------------------------
90900920092009
1.2YEAR
SQL>SELECTTO_CHAR(SYSTIMESTAMP,'YEAR')fromdual;
TO_CHAR(SYSTIMESTAMP,'YEAR')
------------------------------------------
TWOTHOUSANDNINE
SQL>SELECTTO_CHAR(SYSTIMESTAMP,'YEAR','NLS_DATE_LANGUAGE=American')fromdual;
TO_CHAR(SYSTIMESTAMP,'YEAR','N
------------------------------------------
TWOTHOUSANDNINE
2.Q季度1~3月为第一季度,2表示第二季度。
SQL>Selectto_char(sysdate,'Q')fromdual;
TO_CHAR(SYSDATE,'Q')
--------------------
1
3.月份数
3.1MM月份数
SQL>Selectto_char(sysdate,'MM')fromdual;
TO_CHAR(SYSDATE,'MM')
---------------------
02
3.2Month用9个字符长度表示的月份名
SQL>Selectto_char(sysdate,'Month')fromdual;
TO_CHAR(SYSDATE,'MONTH')
------------------------
2月
3.3月份函数汇总:
SQL>Selectto_char(sysdate,'Month'),
2to_char(sysdate,'mon'),
3to_char(sysdate,'Month'),
4to_char(sysdate,'mon','NLS_DATE_LANGUAGE=American'),--三位字符的月份缩写全部小写
5to_char(sysdate,'Mon','NLS_DATE_LANGUAGE=American'),--三位字符的月份缩写首字母大些
6to_char(sysdate,'MON','NLS_DATE_LANGUAGE=American'),--三位字符的月份缩写全部大些
7to_char(sysdate,'month','NLS_DATE_LANGUAGE=American'),--九个字符表示的月份,右边用空格填补全部小写
8to_char(sysdate,'Month','NLS_DATE_LANGUAGE=American'),--九个字符表示的月份,右边用空格填补首字母大些
9to_char(sysdate,'MONTH','NLS_DATE_LANGUAGE=American')--九个字符表示的月份,右边用空格填补全部大些
10FROMdual;
TO_CHAR(SYSDATE,'MONTH')TO_CHAR(SYSDATE,'MON')TO_CHAR(SYSDATE,'MONTH')TO_CHAR(SYSDATE,'MON','NLS_DATTO_CHAR(SYSDATE,'MON','NLS_DATTO_CHAR(SYSDATE,'MON','NLS_DATTO_CHAR(SYSDATE,'MONTH','NLS_DTO_CHAR(SYSDATE,'MONTH','NLS_DTO_CHAR(SYSDATE,'MONTH','NLS_D
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2月2月2月febFebFEBfebruaryFebruaryFEBRUARY
3.4.RM月份的罗马表示(V在罗马数字中表示5)
SQL>Selectto_char(sysdate,'RM')fromdual;
TO_CHAR(SYSDATE,'RM')
---------------------
II
4周的运算
4.1WW当年第几周(2009年2月27日为2009年的第9周)
SQL>Selectto_char(sysdate,'WW')fromdual;
TO_CHAR(SYSDATE,'WW')
---------------------
09
SQL>
4.2W本月第几周(2009年2月27日为2月第4周)
SQL>Selectto_char(sysdate,'W')fromdual;
TO_CHAR(SYSDATE,'W')
--------------------
4
6.天的运算
6.1DDD当年第几天(2009年2月27日为2009年第58天)
SQL>Selectto_char(sysdate,'DDD')fromdual;
TO_CHAR(SYSDATE,'DDD')
----------------------
058
6.2DD当月第几天(2009年2月27日为2月的第27天)
SQL>Selectto_char(sysdate,'DD')fromdual;
TO_CHAR(SYSDATE,'DD')
---------------------
27
6.3D周内第几天(2009年2月27日为这一周的第6天,周五)
数据字显示和星期对应关系如下)
1234567
日一二三四五六
SQL>Selectto_char(sysdate,'D')fromdual;
TO_CHAR(SYSDATE,'D')
--------------------
6
6.4DAY中文(英文)的星期几(2009年2月27日为星期五)
SQL>Selectto_char(sysdate,'DAY')fromdual;
TO_CHAR(SYSDATE,'DAY')
----------------------
星期五
6.5DY中文(英文)的星期几(2009年2月27日为星期五)
SQL>Selectto_char(sysdate,'DY')fromdual;
TO_CHAR(SYSDATE,'DY')
---------------------
星期五
6.6日函数运算汇总:
SQL>Select
2to_char(sysdate,'D'),
3to_char(sysdate,'DD'),
4to_char(sysdate,'DDD'),
5to_char(sysdate,'dy','NLS_DATE_LANGUAGE=American'),
6to_char(sysdate,'Dy','NLS_DATE_LANGUAGE=American'),
7to_char(sysdate,'DY','NLS_DATE_LANGUAGE=American'),
8to_char(sysdate,'day','NLS_DATE_LANGUAGE=American'),
9to_char(sysdate,'Day','NLS_DATE_LANGUAGE=American'),
10to_char(sysdate,'DAY','NLS_DATE_LANGUAGE=American')fromdual;
TO_CHAR(SYSDATE,'D')TO_CHAR(SYSDATE,'DD')TO_CHAR(SYSDATE,'DDD')TO_CHAR(SYSDATE,'DY','NLS_DATETO_CHAR(SYSDATE,'DY','NLS_DATETO_CHAR(SYSDATE,'DY','NLS_DATETO_CHAR(SYSDATE,'DAY','NLS_DATTO_CHAR(SYSDATE,'DAY','NLS_DATTO_CHAR(SYSDATE,'DAY','NLS_DAT
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
627058friFriFRIfridayFridayFRIDAY
SQL>Select
2to_char(sysdate,'D')||chr(10)||
3to_char(sysdate,'DD')||chr(10)||
4to_char(sysdate,'DDD')||chr(10)||
5to_char(sysdate,'dy','NLS_DATE_LANGUAGE=American')||chr(10)||
6to_char(sysdate,'Dy','NLS_DATE_LANGUAGE=American')||chr(10)||
7to_char(sysdate,'DY','NLS_DATE_LANGUAGE=American')||chr(10)||
8to_char(sysdate,'day','NLS_DATE_LANGUAGE=American')||chr(10)||
9to_char(sysdate,'Day','NLS_DATE_LANGUAGE=American')||chr(10)||
10to_char(sysdate,'DAY','NLS_DATE_LANGUAGE=American')fromdual;
TO_CHAR(SYSDATE,'D')||CHR(10)|
--------------------------------------------------
6
27
058
fri
Fri
FRI
friday
Friday
FRIDAY
7小时的运算
7.1.HH或HH1212进制小时数(16:09分为用12小时制计时为4点)
SQL>Selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss'),to_char(sysdate,'HH')fromdual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH2TO_CHAR(SYSDATE,'HH')
---------------------------------------------------
2009-02-2810:58:5410
7.2.HH2424小时制
SQL>Selectto_char(sysdate+0.5,'yyyy-mm-ddhh24:mi:ss'),to_char(sysdate+0.5,'HH'),to_char(sysdate+0.5,'HH24')fromdual;
TO_CHAR(SYSDATE+0.5,'YYYY-MM-DTO_CHAR(SYSDATE+0.5,'HH')TO_CHAR(SYSDATE+0.5,'HH24')
----------------------------------------------------------------------------------
2009-02-2822:59:491022
8上下午的运算
SQL>SELECTTO_CHAR(SYSTIMESTAMP,'AM','NLS_DATE_LANGUAGE=American'),TO_CHAR(SYSTIMESTAMP,'AM'),
2TO_CHAR(SYSTIMESTAMP,'PM','NLS_DATE_LANGUAGE=American'),TO_CHAR(SYSTIMESTAMP,'PM'),
3TO_CHAR(SYSTIMESTAMP+0.5,'PM','NLS_DATE_LANGUAGE=American'),TO_CHAR(SYSTIMESTAMP+0.5,'PM')fromdual;
TO_CHAR(SYSTIMESTAMP,'AM','NLSTO_CHAR(SYSTIMESTAMP,'AM')TO_CHAR(SYSTIMESTAMP,'PM','NLSTO_CHAR(SYSTIMESTAMP,'PM')TO_CHAR(SYSTIMESTAMP+0.5,'PM',TO_CHAR(SYSTIMESTAMP+0.5,'PM')
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AM上午AM上午PM下午
9MI:一小时中的分钟Minute(0-59).
SQL>Selectto_char(sysdate,'mi')fromdual;
TO_CHAR(SYSDATE,'MI')
---------------------
54
10秒的运算
10.1SS:一分钟中的秒,SSSSs:从午夜开始过去的秒数
SQL>Selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss'),to_char(sysdate,'ss'),to_char(sysdate,'SSSSS')fromdual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH2TO_CHAR(SYSDATE,'SS')TO_CHAR(SYSDATE,'SSSSS')
---------------------------------------------------------------------------
2009-02-2811:06:040439964
10.2这个好像取到6位就行了
SQL>SELECTto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')||chr(10)||
2TO_CHAR(SYSTIMESTAMP,'SS.FF1')||chr(10)||TO_CHAR(SYSTIMESTAMP,'SS.FF2')||chr(10)||TO_CHAR(SYSTIMESTAMP,'SS.FF3')||chr(10)||
3TO_CHAR(SYSTIMESTAMP,'SS.FF4')||chr(10)||TO_CHAR(SYSTIMESTAMP,'SS.FF5')||chr(10)||TO_CHAR(SYSTIMESTAMP,'SS.FF6')||chr(10)||
4TO_CHAR(SYSTIMESTAMP,'SS.FF7')||chr(10)||TO_CHAR(SYSTIMESTAMP,'SS.FF8')||chr(10)||TO_CHAR(SYSTIMESTAMP,'SS.FF9')fromdual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
--------------------------------------------------------------------------------
2009-02-2811:14:21
21.8
21.81
21.810
21.8100
21.81002
21.810022
21.8100220
21.81002200
21.810022000
B)trunc()函数,都是对数据向前取整
1.计算小时,分,秒,毫秒
SQL>SELECTDAYS,
2A,
3TRUNC(A*24)HOURS,
4TRUNC(A*24*60-60*TRUNC(A*24))MINUTES,
5TRUNC(A*24*60*60-60*TRUNC(A*24*60))SECONDS,
6TRUNC(A*24*60*60*100-100*TRUNC(A*24*60*60))MSECONDS
7FROM(SELECTTRUNC(SYSDATE)DAYS,SYSDATE-TRUNC(SYSDATE)AFROMDUAL);
DAYSAHOURSMINUTESSECONDSMSECONDS
-------------------------------------------------------------
2009-2-280.569791661340300
2.世纪第一天
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,trunc(SYSDATE,'cc')fromdual;
NOWTRUNC(SYSDATE,'CC')
--------------------------------------
2009-02-2813:51:302001-1-1
3.年的第一天
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,
2trunc(SYSDATE,'SYYYY'),trunc(SYSDATE,'YYYY'),
3trunc(SYSDATE,'YEAR'),trunc(SYSDATE,'SYEAR'),
4trunc(SYSDATE,'YYY'),trunc(SYSDATE,'YY'),trunc(SYSDATE,'Y')
5fromdual;
NOWTRUNC(SYSDATE,'SYYYY')TRUNC(SYSDATE,'YYYY')TRUNC(SYSDATE,'YEAR')TRUNC(SYSDATE,'SYEAR')TRUNC(SYSDATE,'YYY')TRUNC(SYSDATE,'YY')TRUNC(SYSDATE,'Y')
------------------------------------------------------------------------------------------------------------------------------------------------------------------
2009-02-2813:52:512009-1-12009-1-12009-1-12009-1-12009-1-12009-1-12009-1-1
4.季度第一天
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,trunc(SYSDATE,'q'),trunc(SYSDATE+100,'q')fromdual;
NOWTRUNC(SYSDATE,'Q')TRUNC(SYSDATE+100,'Q')
-----------------------------------------------------------
2009-02-2814:07:032009-1-12009-4-1
5.月份的第一天
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,trunc(SYSDATE,'MONTH'),trunc(SYSDATE,'MON'),trunc(SYSDATE,'MM'),trunc(SYSDATE,'RM')fromdual;
NOWTRUNC(SYSDATE,'MONTH')TRUNC(SYSDATE,'MON')TRUNC(SYSDATE,'MM')TRUNC(SYSDATE,'RM')
---------------------------------------------------------------------------------------------------
2009-02-2814:09:082009-2-12009-2-12009-2-12009-2-1
6周
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,trunc(SYSDATE,'WW'),trunc(SYSDATE,'W')fromdual;
NOWTRUNC(SYSDATE,'WW')TRUNC(SYSDATE,'W')
--------------------------------------------------------
2009-02-2814:13:432009-2-262009-2-22
6.2周的第一天
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,trunc(SYSDATE,'DAY'),trunc(SYSDATE,'DY'),trunc(SYSDATE,'D')fromdual;
NOWTRUNC(SYSDATE,'DAY')TRUNC(SYSDATE,'DY')TRUNC(SYSDATE,'D')
----------------------------------------------------------------------------
2009-02-2814:24:312009-2-222009-2-222009-2-22
9.天
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,trunc(SYSDATE,'DDD'),trunc(SYSDATE,'DD'),trunc(SYSDATE,'J')fromdual;
NOWTRUNC(SYSDATE,'DDD')TRUNC(SYSDATE,'DD')TRUNC(SYSDATE,'J')
----------------------------------------------------------------------------
2009-02-2814:21:412009-2-282009-2-282009-2-28
10小时
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,trunc(SYSDATE,'HH'),trunc(SYSDATE,'HH12'),trunc(SYSDATE,'HH24')fromdual;
NOWTRUNC(SYSDATE,'HH')TRUNC(SYSDATE,'HH12')TRUNC(SYSDATE,'HH24')
--------------------------------------------------------------------------------
2009-02-2814:26:392009-2-2814:00:002009-2-2814:00:002009-2-2814:00:00
11分
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,trunc(SYSDATE,'MI')fromdual;
NOWTRUNC(SYSDATE,'MI')
--------------------------------------
2009-02-2814:31:372009-2-2814:31:00
C)round()函数和trunc函数类似,部分取值向后取整
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,round(SYSDATE,'cc')fromdual;
NOWROUND(SYSDATE,'CC')
--------------------------------------
2009-02-2814:33:102001-1-1
SQL>selectround(SYSDATE,'cc')fromdual;
ROUND(SYSDATE,'CC')
-------------------
2001-1-1
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,
2round(SYSDATE,'SYYYY'),round(SYSDATE,'YYYY'),
3round(SYSDATE,'YEAR'),round(SYSDATE,'SYEAR'),
4round(SYSDATE,'YYY'),round(SYSDATE,'YY'),round(SYSDATE,'Y')
5fromdual;
NOWROUND(SYSDATE,'SYYYY')ROUND(SYSDATE,'YYYY')ROUND(SYSDATE,'YEAR')ROUND(SYSDATE,'SYEAR')ROUND(SYSDATE,'YYY')ROUND(SYSDATE,'YY')ROUND(SYSDATE,'Y')
------------------------------------------------------------------------------------------------------------------------------------------------------------------
2009-02-2814:33:112009-1-12009-1-12009-1-12009-1-12009-1-12009-1-12009-1-1
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,round(SYSDATE,'Q')fromdual;
NOWROUND(SYSDATE,'Q')
-------------------------------------
2009-02-2814:33:112009-4-1
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,round(SYSDATE,'q'),round(SYSDATE+100,'q')fromdual;
NOWROUND(SYSDATE,'Q')ROUND(SYSDATE+100,'Q')
-----------------------------------------------------------
2009-02-2814:33:112009-4-12009-7-1
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,round(SYSDATE,'MONTH'),round(SYSDATE,'MON'),round(SYSDATE,'MM'),round(SYSDATE,'RM')fromdual;
NOWROUND(SYSDATE,'MONTH')ROUND(SYSDATE,'MON')ROUND(SYSDATE,'MM')ROUND(SYSDATE,'RM')
---------------------------------------------------------------------------------------------------
2009-02-2814:33:112009-3-12009-3-12009-3-12009-3-1
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,round(SYSDATE,'WW'),round(SYSDATE,'W')fromdual;
NOWROUND(SYSDATE,'WW')ROUND(SYSDATE,'W')
--------------------------------------------------------
2009-02-2814:33:112009-2-262009-3-1
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,round(SYSDATE,'DDD'),round(SYSDATE,'DD'),round(SYSDATE,'J')fromdual;
NOWROUND(SYSDATE,'DDD')ROUND(SYSDATE,'DD')ROUND(SYSDATE,'J')
----------------------------------------------------------------------------
2009-02-2814:33:112009-3-12009-3-12009-3-1
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,round(SYSDATE,'DAY'),round(SYSDATE,'DY'),round(SYSDATE,'D')fromdual;
NOWROUND(SYSDATE,'DAY')ROUND(SYSDATE,'DY')ROUND(SYSDATE,'D')
----------------------------------------------------------------------------
2009-02-2814:33:112009-3-12009-3-12009-3-1
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,round(SYSDATE,'HH'),round(SYSDATE,'HH12'),round(SYSDATE,'HH24')fromdual;
NOWROUND(SYSDATE,'HH')ROUND(SYSDATE,'HH12')ROUND(SYSDATE,'HH24')
--------------------------------------------------------------------------------
2009-02-2814:33:112009-2-2815:00:002009-2-2815:00:002009-2-2815:00:00
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,round(SYSDATE,'MI')fromdual;
NOWROUND(SYSDATE,'MI')
--------------------------------------
2009-02-2814:33:112009-2-2814:33:00
D)TO_DATE使用详解
时常使用to_date函数来查询特定时间内的数据。
语法:
TO_DATE(x[,format])用于将字符串x转换为时间值,该函数可以指定一个可选的字符串format参数来说明x的格式。
如果没有指定format参数,日期就使用默认的数据库格式(通常是DD-MON-YYYY或DD-MON-YY)。
注意:
数据库参数NLS_DATE_FORMAT指定了默认的日期格式。可以修改NLS_DATE_FORMAT的设置。
2.指定时间
当然,在时间值中也可以指定时间。如果在时间值中没有指定时间,那么时间值的时间部分默认为12:00:00A.M.。时间可以使用前面表5-2所示的各种格式。时间格式的一个例子是HH24:MI:SS,其中:
●HH24是一个2位数字,表示24小时格式中的小时数,该值的范围为00~23。
●MI是一个2位数字,表示分钟,该值的范围为00~59。
●SS是一个2位数字,表示秒,该值的范围为00~59。
使用HH24:MI:SS格式的一个时间的例子是19:23:36。使用这个时间的一个完整时间值是:
05-FEB-196819:32:36
这个时间值的格式为:
DD-MON-YYYYHH24:MI:SS
to_data(date&;time,format)
其中第一个参数date&;time是我们要查询的具体日期和时间,比如:2006年5月21日。但是这个时间也分
为很多种精度的,比如:
2006年5月21日
2006年5月21日17:24
2006年5月21日17:34分55秒
这个精度要根据实际情况来定。
另外一个参数format决定的日期的表示方法,比如:
2006年5月21日可以表示为:060521、20060521、2006FEB21等等
而他们对应的format为
060521YYMMDD
20060521YYYYMMDD
2006FEB21YYYYMONDD
示例:
select*frombookwhereintime=to_date('2003/02/17/17/53/55','YYYY/MM/DD/HH24/MI/SS')
上面的语句是查询:2003年8月17日下午5点53分55秒,入库的书本。
其实用下面的写法也是可以的
select*frombookwhereintime=to_date('20030217175355','YYYYMMDDHH24MISS')
select*frombookwhereintime=to_date
('2003-02-17-17-53-55','YYYY-MM-DD-HH24/-I-SS')
中间的连字符"/"、":"或是"-",并不影响表达,只是为了更加容易看清楚。
表示年份有以下几种格式,及这种格式对应的表达方法:
2003年为例
YYYY2003
YYY003
YY03
月份表示格式及表达方法:
二月分为例
MM08
RMIIX(罗马数字)
MONTHfebruary
MONfeb
日期的格式及表达方法:
17号为例
DDD762月的17日在本年度(不是闰年的情况)是多少天
DD17在本月中是号(17号)
D在这一个星期是哪天
星期的格式和表示方法:
星期一为例
DAYmonday全名显示
DYmon缩写
小时的格式和表示方法:
HH2418二十四小时制
分钟的格式和表示方法:
MI32该小时32分钟
秒的表示方法
SS28该分钟28秒
二。其他运算函数
1、add_months()用于从一个日期值增加或减少一些月份
SQL>selectadd_months(sysdate,-12)"LastYear",to_char(sysdate,'yyyy-mm-ddhh24:mi:ss')now,add_months(sysdate,12)"NextYear"fromdual;
LastYearNOWNextYear
-------------------------------------------------------
2008-2-2914:41:542009-02-2814:41:542010-2-2814:41:54
2、current_date()返回当前会放时区中的当前日期
date_value:=current_date
SQL>columnsessiontimezonefora15
SQL>selectsessiontimezone,current_datefromdual;
SESSIONTIMEZONECURRENT_DA
-------------------------
+08:0013-11月-03
SQL>altersessionsettime_zone='-11:00'
2/
会话已更改。
SQL>selectsessiontimezone,current_timestampfromdual;
SESSIONTIMEZONECURRENT_TIMESTAMP
---------------------------------------------------
-11:0012-11月-0304.59.13.668000下午-11:00
SQL>
3、current_timestamp()以timestampwithtimezone数据类型返回当前会放时区中的当前日期
timestamp_with_time_zone_value:=current_timestamp([timestamp_precision])
SQL>columnsessiontimezonefora15
SQL>columncurrent_timestampformata36
SQL>selectsessiontimezone,current_timestampfromdual;
SESSIONTIMEZONECURRENT_TIMESTAMP
---------------------------------------------------
+08:0013-11月-0311.56.28.160000上午+08:00
SQL>altersessionsettime_zone='-11:00'
2/
会话已更改。
SQL>selectsessiontimezone,current_timestampfromdual;
SESSIONTIMEZONECURRENT_TIMESTAMP
---------------------------------------------------
-11:0012-11月-0304.58.00.243000下午-11:00
4、dbtimezone()返回时区
varchar_value:=dbtimezone
SQL>selectdbtimezonefromdual;
DBTIMEZONE
----------
+08:00
5、extract()找出日期或间隔值的字段值
date_value:=extract(date_fieldfrom[datetime_value|interval_value])
SQL>selectextract(monthfromsysdate)"ThisMonth"fromdual;
ThisMonth
----------
2
SQL>selectextract(yearfromadd_months(sysdate,36))"3YearsOut"fromdual;
3YearsOut
-----------
2012
6、last_day()返回包含了日期参数的月份的最后一天的日期
date_value:=last_day(date_value)
SQL>selectlast_day(sysdate)"Lastdayofthismonth"fromdual;
Lastdayofthismonth
----------------------
2009-2-2814:54:09
7、localtimestamp()返回会话中的日期和时间
timestamp_value:=localtimestamp
SQL>columnlocaltimestampformata28
SQL>selectlocaltimestampfromdual;
LOCALTIMESTAMP
----------------------------
28-2月-0902.54.55.266868下午
SQL>selectlocaltimestamp,current_timestampfromdual;
LOCALTIMESTAMPCURRENT_TIMESTAMP
----------------------------------------------------------------
28-2月-0902.56.39.923571下午28-2月-0902.56.39.923571下午+08:00
8、months_between()判断两个日期之间的月份数量
number_value:=months_between(date_value,date_value)
SQL>selectmonths_between(sysdate,date'1971-05-18')fromdual;
MONTHS_BETWEEN(SYSDATE,DATE'19
------------------------------
453.342685185185
SQL>selectmonths_between(sysdate,date'2001-01-01')fromdual;
MONTHS_BETWEEN(SYSDATE,DATE'20
------------------------------
97.8910812425329
9、next_day()给定一个日期值,返回由第二个参数指出的日子第一次出现在的日期值(应返回相应日子的名称字符串)
常用
1.找出今年的天数
SQL>selectadd_months(trunc(sysdate,'year'),12)-trunc(sysdate,'year')fromdual;
ADD_MONTHS(TRUNC(SYSDATE,'YEAR
------------------------------
365
SQL>selectadd_months(trunc(to_date('20081201','yyyymmdd'),'year'),12)-trunc(to_date('20081201','yyyymmdd'),'year')fromdual;
ADD_MONTHS(TRUNC(TO_DATE('2008
------------------------------
366
闰年的处理方法
to_char(last_day(to_date('02'||:year,'mmyyyy')),'dd')
如果是28就不是闰年