Oracle 时间问题
2011-01-31 20:35
381 查看
时间问题是经常出现的问题。先抛出两个函数to_date(),to_char()这两个是处理时间问题的常用函数。时间类型进行算术加减运算都是以天为单位的。
TO_CHAR(x[[,c2],C3])
【功能】将日期或数据转换为char数据类型
【参数】
x是一个date或number数据类型。
c2为格式参数
c3为NLS设置参数
如果x为日期nlsparm=NLS_DATE_LANGUAGE控制返回的月份和日份所使用的语言。
selectsysdate当前时间,
to_char(sysdate,’yyyy’)当前年,
to_char(sysdate,’mm’)当前月,
to_char(sysdate,’dd’)当前日,
to_char(sysdate,’hh24’)当前小时,--如果是hh12就是12小时制
to_char(sysdate,’mi’)当前分,
to_char(sysdate,’ss’)当前秒
fromdual;
--当前时间所在的季度数
Selectto_char(sysdate,'Q')fromdual;
--当前时间为年的第几周(注意当前年的第一天为周几)
selectto_char(sysdate,'ww')fromdual;
--当前时间为月的第几周(注意当前月的第一天为周几)
selectto_char(sysdate,'w')fromdual;
--当前时间为年的第几天
Selectto_char(sysdate,'DDD')fromdual;
再介绍几个时间函数
注意:这个next_day()函数和当前会话语言有关,我下面的这个例子就很好的说明了这一点。
通过select*fromv$nls_parameterswhereparameter='NLS_DATE_LANGUAGE';这个语句可以查询到当前系统的语言。
通过altersessionsetNLS_DATE_LANGUAGE=’SIMPLIFIEDCHINESE’来修改当前会话的语言。(SIMPLIFIEDCHINESE为简体中文;AMERICAN为英语)
selectnext_day(sysdate,'monday')nextmondayfromdual;
nextmonday
-------------------
2011-01-3117:40:17
scott@YPCOST>selectnext_day(sysdate,'星期一')fromdual;
selectnext_day(sysdate,'星期一')fromdual
*
第1行出现错误:
ORA-01846:周中的日无效
altersessionsetnls_date_language='SIMPLIFIEDCHINESE';
会话已更改。
selectnext_day(sysdate,'星期一')nextmondayfromdual;
nextmonday
-------------------
2011-01-3117:47:37
--本周第一天和最后一天
selecttrunc(sysdate,'d')+1fromdual;
selecttrunc(sysdate,'d')+7fromdual;
--本月第一天和最后一天
selecttrunc(sysdate,'mm')fromdual;
selectlast_day(trunc(sysdate))fromdual;
--本季第一天和最后一天
selecttrunc(sysdate,'Q')fromdual;
selectadd_months(trunc(sysdate,'Q'),3)-1fromdual;
--本年第一天和最后一天
selecttrunc(sysdate,'yyyy')fromdual;
selectadd_months(trunc(sysdate,'yyyy'),12)-1fromdual;
有关时间问题就介绍这么多了,希望大家都能掌握这些函数,并且能够灵活的利用它们
有不足的地方希望大家都能指出!!
TO_CHAR(x[[,c2],C3])
【功能】将日期或数据转换为char数据类型
【参数】
x是一个date或number数据类型。
c2为格式参数
c3为NLS设置参数
如果x为日期nlsparm=NLS_DATE_LANGUAGE控制返回的月份和日份所使用的语言。
TO_DATE(X[,c2[,c3]])
【功能】将字符串X转化为日期型
【参数】c2,c3,字符型,参照to_char()
【返回】字符串
如果x格式为日期型(date)格式时,则相同表达:datex
如果x格式为日期时间型(timestamp)格式时,则相同表达:timestampx
查询系统的当前时间,当前年,当前月,当前日,当前小时,当前分,当前秒
selectsysdate当前时间,
to_char(sysdate,’yyyy’)当前年,
to_char(sysdate,’mm’)当前月,
to_char(sysdate,’dd’)当前日,
to_char(sysdate,’hh24’)当前小时,--如果是hh12就是12小时制
to_char(sysdate,’mi’)当前分,
to_char(sysdate,’ss’)当前秒
fromdual;
--当前时间所在的季度数
Selectto_char(sysdate,'Q')fromdual;
--当前时间为年的第几周(注意当前年的第一天为周几)
selectto_char(sysdate,'ww')fromdual;
--当前时间为月的第几周(注意当前月的第一天为周几)
selectto_char(sysdate,'w')fromdual;
--当前时间为年的第几天
Selectto_char(sysdate,'DDD')fromdual;
再介绍几个时间函数
round(d1[,c1])
【功能】:给出日期d1按期间(参数c1)四舍五入后的期间的第一天日期(与数值四舍五入意思相近)
【参数】:d1日期型,c1为字符型(参数),c1默认为j(即最近0点日期)
【参数表】:c1对应的参数表:
最近0点日期:取消参数c1或j
最近的星期日:day或dy或d
最近月初日期:month或mon或mm或rm
最近季日期:q
最近年初日期:syear或year或yyyy或yyy或yy或y(多个y表示精度)
最近世纪初日期:cc或scc
trunc(d1[,c1])
【功能】:返回日期d1所在期间(参数c1)的第一天日期
【参数】:d1日期型,c1为字符型(参数),c1默认为j(即当前日期)
【参数表】:c1对应的参数表:
最近0点日期:取消参数c1或j
最近的星期日:day或dy或d(每周顺序:日,一,二,三,四,五,六)
最近月初日期:month或mon或mm或rm
最近季日期:q
最近年初日期:syear或year或yyyy或yyy或yy或y(多个y表示精度)
最近世纪初日期:cc或scc
extract(c1fromd1)
【功能】:日期/时间d1中,参数(c1)的值
【参数】:d1日期型(date)/日期时间型(timestamp),c1为字符型(参数)
【参数表】:c1对应的参数表详见示例
【返回】:字符
【示例】
select
extract(hourfromtimestamp'2001-2-162:38:40')小时,
extract(minutefromtimestamp'2001-2-162:38:40')分钟,
extract(secondfromtimestamp'2001-2-162:38:40')秒,
extract(DAYfromtimestamp'2001-2-162:38:40')日,
extract(MONTHfromtimestamp'2001-2-162:38:40')月,
extract(YEARfromtimestamp'2001-2-162:38:40')年
fromdual;
selectextract(YEARfromdate'2001-2-16')fromdual;
selectsysdate当前日期,
extract(hourfromtimestamptimestampsysdate)小时,
extract(DAYfromsysdate)日,
extract(MONTHfromsysdate)月,
extract(YEARfromsysdate)年
fromdual;
add_months(d1,n1)
【功能】:返回在日期d1基础上再加n1个月后新的日期。
【参数】:d1,日期型,n1数字型
【返回】:日期
last_day(d1)
【功能】:返回日期d1所在月份最后一天的日期。
【参数】:d1,日期型
【返回】:日期
months_between(d1,d2)
【功能】:返回日期d1到日期d2之间的月数。
【参数】:d1,d2日期型
next_day(d1[,c1])
【功能】:返回日期d1在下周,星期几(参数c1)的日期
【参数】:d1日期型,c1为字符型(参数),c1默认为j(即当前日期)
【参数表】:c1对应:星期一,星期二,星期三……星期日
【返回】:日期
注意:这个next_day()函数和当前会话语言有关,我下面的这个例子就很好的说明了这一点。
通过select*fromv$nls_parameterswhereparameter='NLS_DATE_LANGUAGE';这个语句可以查询到当前系统的语言。
通过altersessionsetNLS_DATE_LANGUAGE=’SIMPLIFIEDCHINESE’来修改当前会话的语言。(SIMPLIFIEDCHINESE为简体中文;AMERICAN为英语)
selectnext_day(sysdate,'monday')nextmondayfromdual;
nextmonday
-------------------
2011-01-3117:40:17
scott@YPCOST>selectnext_day(sysdate,'星期一')fromdual;
selectnext_day(sysdate,'星期一')fromdual
*
第1行出现错误:
ORA-01846:周中的日无效
altersessionsetnls_date_language='SIMPLIFIEDCHINESE';
会话已更改。
selectnext_day(sysdate,'星期一')nextmondayfromdual;
nextmonday
-------------------
2011-01-3117:47:37
--本周第一天和最后一天
selecttrunc(sysdate,'d')+1fromdual;
selecttrunc(sysdate,'d')+7fromdual;
--本月第一天和最后一天
selecttrunc(sysdate,'mm')fromdual;
selectlast_day(trunc(sysdate))fromdual;
--本季第一天和最后一天
selecttrunc(sysdate,'Q')fromdual;
selectadd_months(trunc(sysdate,'Q'),3)-1fromdual;
--本年第一天和最后一天
selecttrunc(sysdate,'yyyy')fromdual;
selectadd_months(trunc(sysdate,'yyyy'),12)-1fromdual;
有关时间问题就介绍这么多了,希望大家都能掌握这些函数,并且能够灵活的利用它们
有不足的地方希望大家都能指出!!
相关文章推荐
- oracle多语言环境下to_date时间转换问题
- oracle 时间字段自动更新问题
- oracle 时间问题
- Oracle时间去除零的问题
- oracle时间查询范围问题(当天数据)
- Oracle转换时间出现的问题:ORA-01810: format code appears twice
- 安装oracle 10g时遇到时间不同步的问题prkc-1002,如下图
- 用mybatis查oracle,spring操纵mongodb插入数据时出现的时间类型问题
- Oracle 显示时间问题
- Oracle 11g RAC 本地时间和通过listener连接时间不相同的问题
- oracle中时间转换的问题
- oracle的SQL语句中同一函数执行的时间问题
- 一个关于Oracle更新语句引发的时间字段类型的问题
- HP-UX环境,crontab中调脚本,显示oracle时间的问题
- Oracle DB 服务器 系统时间修改问题 与 SCN 关系的深入研究
- Hibernate连接Oracle 的 Date字段时间时分秒丢失问题
- oracle时间格式问题(查询)
- ORACLE/JSP技术涉及日期、时间问题的处理
- Oracle中时间转换要注意的问题
- oracle在groupby时间时,时间间断问题处理