oracle之时间转换
- 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;
- TO_DATE格式(以时间:2007-11-02 13:45:25为例)
- Year:
- yy two digits 两位年 显示值:07
- yyy three digits 三位年 显示值:007
- yyyy four digits 四位年 显示值:2007
- Month:
- mm number 两位月 显示值:11
- mon abbreviated 字符集表示 显示值:11月,若是英文版,显示nov
- month spelled out 字符集表示 显示值:11月,若是英文版,显示november
- Day:
- dd number 当月第几天 显示值:02
- ddd number 当年第几天 显示值:02
- dy abbreviated 当周第几天简写 显示值:星期五,若是英文版,显示fri
- day spelled out 当周第几天全写 显示值:星期五,若是英文版,显示friday
- ddspth spelled out, ordinal twelfth
- Hour:
- hh two digits 12小时进制 显示值:01
- hh24 two digits 24小时进制 显示值:13
- Minute:
- mi two digits 60进制 显示值:45
- Second:
- ss two digits 60进制 显示值:25
- 其它
- Q digit 季度 显示值:4
- WW digit 当年第几周 显示值:44
- W digit 当月第几周 显示值:1
- 24小时格式下时间范围为: 0:00:00 - 23:59:59....
- 12小时格式下时间范围为: 1:00:00 - 12:59:59 ....
- 1. 日期和字符转换函数用法(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_char(sysdate,'hh24') as nowHour from dual; //获取时间的时
- select to_char(sysdate,'mi') as nowMinute from dual; //获取时间的分
- select to_char(sysdate,'ss') as nowSecond from dual; //获取时间的秒
- select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual//
- 2.
- select to_char( to_date(222,'J'),'Jsp') from dual
- 显示Two Hundred Twenty-Two
- 3.求某天是星期几
- select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
- 星期一
- select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
- monday
- 设置日期语言
- ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
- 也可以这样
- TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')
- 4. 两个日期间的天数
- select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;
- 5. 时间为null的用法
- select id, active_date from table1
- UNION
- select 1, TO_DATE(null) from dual;
- 注意要用TO_DATE(null)
- 6.月份差
- a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
- 那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
- 所以,当时间需要精确的时候,觉得to_char还是必要的
- 7. 日期格式冲突问题
- 输入的格式要看你安装的Oracle字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'
- alter system set NLS_DATE_LANGUAGE = American
- alter session set NLS_DATE_LANGUAGE = American
- 或者在to_date中写
- select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
- 注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,
- 可查看
- select * from nls_session_parameters
- select * from V$NLS_PARAMETERS
- 8.
- select count(*)
- from ( select rownum-1 rnum
- from all_objects
- where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
- 02-01','yyyy-mm-dd')+1
- )
- where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
- not in ( '1', '7' )
- 查找2002-02-28至2002-02-01间除星期一和七的天数
- 在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).
- 9. 查找月份
- select months_between(to_date('01-31-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
- 1
- select months_between(to_date('02-01-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
- 1.03225806451613
- 10. Next_day的用法
- Next_day(date, day)
- Monday-Sunday, for format code DAY
- Mon-Sun, for format code DY
- 1-7, for format code D
- 11
- select to_char(sysdate,'hh:mi:ss') TIME from all_objects
- 注意:第一条记录的TIME 与最后一行是一样的
- 可以建立一个函数来处理这个问题
- create or replace function sys_date return date is
- begin
- return sysdate;
- end;
- select to_char(sys_date,'hh:mi:ss') from all_objects;
- 12.获得小时数
- extract()找出日期或间隔值的字段值
- SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer
- SQL> select sysdate ,to_char(sysdate,'hh') from dual;
- SYSDATE TO_CHAR(SYSDATE,'HH')
- -------------------- ---------------------
- 2003-10-13 19:35:21 07
- SQL> select sysdate ,to_char(sysdate,'hh24') from dual;
- SYSDATE TO_CHAR(SYSDATE,'HH24')
- -------------------- -----------------------
- 2003-10-13 19:35:21 19
- 13.年月日的处理
- select older_date,
- newer_date,
- years,
- months,
- abs(
- trunc(
- newer_date-
- add_months( older_date,years*12+months )
- )
- ) days
- from ( select
- trunc(months_between( newer_date, older_date )/12) YEARS,
- mod(trunc(months_between( newer_date, older_date )),12 ) MONTHS,
- newer_date,
- older_date
- from (
- select hiredate older_date, add_months(hiredate,rownum)+rownum newer_date
- from emp
- )
- )
- 14.处理月份天数不定的办法
- select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual
- 16.找出今年的天数
- select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
- 闰年的处理方法
- to_char( last_day( to_date('02' | | :year,'mmyyyy') ), 'dd' )
- 如果是28就不是闰年
- 17.yyyy与rrrr的区别
- 'YYYY99 TO_C
- ------- ----
- yyyy 99 0099
- rrrr 99 1999
- yyyy 01 0001
- rrrr 01 2001
- 18.不同时区的处理
- select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate
- from dual;
- 19.5秒钟一个间隔
- Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')
- from dual
- 2002-11-1 9:55:00 35786
- SSSSS表示5位秒数
- 20.一年的第几天
- select TO_CHAR(SYSDATE,'DDD'),sysdate from dual
- 310 2002-11-6 10:03:51
- 21.计算小时,分,秒,毫秒
- select
- Days,
- A,
- TRUNC(A*24) Hours,
- TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,
- TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,
- TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds
- from
- (
- select
- trunc(sysdate) Days,
- sysdate - trunc(sysdate) A
- from dual
- )
- select * from tabname
- order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');
- //
- floor((date2-date1) /365) 作为年
- floor((date2-date1, 365) /30) 作为月
- d(mod(date2-date1, 365), 30)作为日.
- 23.next_day函数 返回下个星期的日期,day为1-7或星期日-星期六,1表示星期日
- next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。
- 1 2 3 4 5 6 7
- 日 一 二 三 四 五 六
- ---------------------------------------------------------------
- select (sysdate-to_date('2003-12-03 12:55:45','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from ddual
- 日期 返回的是天 然后 转换为ss
- 24,round[舍入到最接近的日期](day:舍入到最接近的星期日)
- select sysdate S1,
- round(sysdate) S2 ,
- round(sysdate,'year') YEAR,
- round(sysdate,'month') MONTH ,
- round(sysdate,'day') DAY from dual
- 25,trunc[截断到最接近的日期,单位为天] ,返回的是日期类型
- select sysdate S1,
- trunc(sysdate) S2, //返回当前日期,无时分秒
- trunc(sysdate,'year') YEAR, //返回当前年的1月1日,无时分秒
- trunc(sysdate,'month') MONTH , //返回当前月的1日,无时分秒
- trunc(sysdate,'day') DAY //返回当前星期的星期天,无时分秒
- from dual
- 26,返回日期列表中最晚日期
- select greatest('01-1月-04','04-1月-04','10-2月-04') from dual
- 27.计算时间差
- 注:oracle时间差是以天数为单位,所以换算成年月,日
- select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))/365) as spanYears from dual //时间差-年
- select ceil(moths_between(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanMonths from dual //时间差-月
- select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanDays from dual //时间差-天
- select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24) as spanHours from dual //时间差-时
- select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60) as spanMinutes from dual //时间差-分
- select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60*60) as spanSeconds from dual //时间差-秒
- 28.更新时间
- 注:oracle时间加减是以天数为单位,设改变量为n,所以换算成年月,日
- select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n*365,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-年
- select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),add_months(sysdate,n) as newTime from dual //改变时间-月
- select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-日
- select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-时
- select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-分
- select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-秒
- 29.查找月的第一天,最后一天
- SELECT Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month,
- Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month,
- Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month,
- LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_Month
- FROM dual;
- 转自:http://262002954-qq-com.iteye.com/blog/1119702
oracle之时间转换的更多相关文章
- oracle数据库时间转换
select * from TAB where 时间 BETWEEN to_date('2011-02-01 22:03:40','yyyy-mm-dd hh24:mi:ss') and to_dat ...
- Oracle修改时间报:ORA-01830: 日期格式图片在转换整个输入字符串之前结束的解决办法
1.错误原因: date类型不能包含秒以后的精度. 如日期:2010-01-01 20:02:20.0 解决方法:将日期秒以后的精度去除, to_date(substr(INVOICE_DATE,1, ...
- oracle时间转换查询
查询oracle 数据库时要查询某一字段的最大时间或者最小时间,因为oracle的时间点 精确到毫秒 甚至更高精度级别 根据字段来转换成对应的时间格式: SELECT TO_CHAR(MAX(crea ...
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...
- Oracle日期格式转换,tochar(),todate()
Oracle日期格式转换 本文主要介绍Oracle中的日期转换. 1. 日期转化为字符串 (以2016年10月20日为例) select to_char(sysdate,'yyyy-mm-dd hh2 ...
- Oracle日期时间函数大全
ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年 显示值:07 yyy three digits ...
- ORACLE对时间日期的处理(转)
共三部分: 第一部分:oracle sql日期比较: http://www.cnblogs.com/sopost/archive/2011/12/03/2275078.html 第二部分:Oracle ...
- Java 时间转换问题总结
这几天开发中遇到时间转换出错的问题,特总结如下: ========================================================================= ...
- [转]ORACLE日期时间函数大全
本文转自:http://www.cnblogs.com/chuncn/archive/2009/04/29/1381282.html ORACLE日期时间函数大全 TO_DATE格式(以时间: ::2 ...
随机推荐
- MySQL 慢查询配置
MYSQL慢查询 1. 慢查询有什么用? 它能记录下所有执行超过long_query_time时间的SQL语句, 帮你找到执行慢的SQL, 方便我们对这些SQL进行优化. 2. 如何开启慢查询? 首先 ...
- 关于Adobe Flash 11.3 引起的火狐使用问题
Adobe Flash 更新到11.3之后,为火狐引入Flash沙盒安全模式,但同时,又造成了部分兼容性问题,导致 Windows vista及 Windows 7上部分火狐崩溃,并致使一些使用Fla ...
- JavaScript Arguments 实现可变参数的函数,以及函数的递归调用
//可变参数的函数 注:也可以使用对象作为参数来实现 function Max() { var temp = arguments[0] || 0; for (var i = 1; i < arg ...
- JavaScript Nested Function 的时空和身份属性
JavaScript 的function 不仅仅是一等公民,简直就是特殊公民.它有许多独特的特征: 1) 它是object,可以存储,传递,附加属性. 2) 它可以有lexical closure, ...
- eclipse在当前项目里面批量替换所有单词
ctrl+f里面只能单个文件用,要整个项目批量替换. 1. 先选中你要替换字符串, 2. 再菜单栏中找到Search→Text→Project,这样就会在整个项目中查找单词. 3. 然后在Search ...
- redis php
redis php 学习1.连接$redis = new redis();$result = $redis->connect('127.0.0.1',6379); 2.set$redis = n ...
- 获取元素位置信息:getBoundingClientRect
一个神奇的方法. 一.历史 偷个懒,上个传送门:http://www.cnblogs.com/2050/archive/2012/02/01/2335211.html 二.介绍 DOM元素方法,返回一 ...
- Ubuntu下搭建本地WordPress站点
想在本地搭建WordPress博客站点作测试用?本教程一步一步教您在Linux上搭建一个LAMP(Linux, Apache, MySQL, PHP)服务器并部署WordPress博客. 请注意在复制 ...
- MySQL和MsSQL实时自动同步---SyncNavigator 数据库同步软件
需要MySQL数据库支持的狐友们有福了,MySQL和MsSQL实时自动同步---SyncNavigator 数据库同步软件 使用SyncNavigator轻松实现数据库异地同步.断点续传.异构同步 ...
- EF学习
一.EF介绍 实体框架 Entity Framework 是ADO.NET 中的一组支持开发面向数据的软件应用程序的技术.在 EF 中的实体数据模型(EDM)由以下三种模型和具有相应文件扩展名的映射文 ...