- 浏览: 192740 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
sun625470637:
数据库读出来的是Thu Mar 15 19:09:25 CST ...
Java自定义时间格式全接触 -
sun625470637:
数据库读出来的是Thu Mar 15 19:09:25 CST ...
Java自定义时间格式全接触 -
Breather.杨:
http://www.open-open.com/lib/vi ...
java导入导出excel操作(jxl) -
scjingying:
baiawquqf 写道 evry good!好东西呀!我晕, ...
java导入导出excel操作(jxl) -
rock1103:
中文乱码
java导出csv文件
Oracle 提供了三个用于存储日期/时间值的数据类型:
表示日期和时间的 DATE 类型。 DATE 字段中存储的值包含有与世纪、年、月、日、小时、分钟和秒相对应的"组成部分"。
日期可以是公元前 4712 年 1 月 1 日到公元 9999 年 12 月 31 日这一范围中的任何一天。
从 Oracle9i 开始提供的 TIMESTAMP 类型是 DATE 类型的有效扩展格式,并且符合 ANSI SQL 标准。
它提供了更大的时间精度,支持多达九位的小数,同时还能够存储时区信息。
从 Oracle9i 开始提供的 INTERVAL
类型,它支持存储时间差(如"两年零五个月"或"三天零十八个小时零四十五分钟"),并可以与 DATE 或 TIMESTAMP
进行加法运算以生成一个新的 DATE / TIMESTAMP 值。
本文主要介绍 DATE 类型,但适用于 DATE 的大部分功能也适用于 TIMESTAMP。 (有关 TIMESTAMP 和
INTERVAL 类型的更多背景知识,请阅读 Jonathan Gennick 在 Oracle 杂志上发表的文章"Datetime
Datatypes Add Precision"和"Finding the Time in Between"(这两篇文章均在 2002 年
11 月 - 12 月刊中发表)。
Oracle 如何存储 DATE。 对于 Oracle 中的 DATE
类型,首先要了解的是,它的内部表示形式使它可以通过不同的方法进行显示和操作。 它有效地独立于任何特定的字符串格式。 如果使用 SELECT
选择一个 DATE 类型,Oracle 将自动把它转换为可读字符串,但这并不是值的实际存储方法。
使用 SYSDATE 选择当前的系统时间,SYSDATE 返回 DATE 类型的值,是数据库所在的操作系统的当前日期和时间:
SELECT SYSDATE FROM dual /* e.g. 25-JUL-05 */
该格式受 Oracle 参数 NLS_DATE_FORMAT 的控制,可以根据每个会话进行更改(如下所示)。 了解一下内部表示形式:
SELECT DUMP(SYSDATE) FROM dual /* e.g. Typ=13 Len=8: 213,7,7,25,23,7,15,0 */
结果中由逗号分隔的值对应于 Oracle 存储日期和时间的每个部分(从世纪一直到秒)所使用的字节。
此处有一个重要问题值得注意:在比较 DATE 类型时,将比较 DATE 的所有组成部分(一直比较到秒)。
在某些情况下,您可能要根据不同的时间单位(如年、月或日)比较两个日期。
这种情况下,可以使用 TRUNC 这样的函数对所比较的两个 DATE 的小时、分钟和秒部分进行向下取整。
有关更多详细信息,请参阅下面的"日期运算"。
如果您熟悉面向对象的编程,则也可将 DATE 类型看作是对象。 他们全都拥有属性(年、月、小时等)和行为,如:
SELECT SYSDATE - 7 FROM dual /* e.g. 18-JUL-05 */
该示例返回七天前的日期。 其它的"行为"包括 DATE 比较,这意味着您可以对日期执行 SORT BY、GROUP BY
以及查找界于两个日期之间的日期 (BETWEEN) 等,还可以进行减法操作: 从一个 DATE 中减去另一个 DATE
以获得整数的日期差(在使用 TIMESTAMP 时,将获得 INTERVAL 类型)。
在 DATE 类型和字符串之间进行转换。TO_DATE() 和 TO_CHAR() 函数用于在 Oracle
DATE"对象"和使用者可理解的日期字符串之间进行转换。
这两个函数均使用三个参数,一个要转换的值、一个可选的格式掩码和一个用于指定语言的可选字符串(例如,FRENCH)。
从概念上而言,格式掩码类似于正则表达式;您指定日期模式,该模式指示 Oracle 如何将匹配的字符串与 DATE 类型关联。 Oracle
数据库 SQL 参考的"格式模型"中介绍了格式掩码。
使用 TO_CHAR。 以下是一个简单示例,它再次使用了 SYSDATE 函数:
SELECT TO_CHAR( SYSDATE, 'YYYY-MM-DD HH24:MI:SS' ) FROM dual /* e.g. 2005-07-26 17:34:04 */
详细了解一下该格式掩码,"YYYY"表示一个四位年份,"MM"表示一个两位月份,"DD"表示一个两位的月份中的日,"HH24"表示 24
小时制的小时,"MI"表示 0 和 59 之间的分钟,"SS"表示 0 和 59 之间的秒。注意,以下字符从格式掩码按原样传递到输出:
/ - , . ; :
其他字符串可以通过括在引号中进行"传递":
- SELECT TO_CHAR(SYSDATE, '"The time is now " HH24:MI:SS "precisely"') FROM dual
- /* e.g. The time is now 17:38:22 precisely
SELECT TO_CHAR(SYSDATE, '"The time is now " HH24:MI:SS "precisely"') FROM dual /* e.g. The time is now 17:38:22 precisely
您在该文档中将发现,还有很多格式掩码模式可用于满足各种使用情况。
注意: TO_CHAR 也可以与 TIMESTAMP 类型结合使用。
使用 TO_DATE。 Oracle 可以使用与 TO_CHAR 相同的格式掩码将字符串分析为 DATE 类型。 假设有一个字符串
20050726173102:
SELECT TO_DATE( '20050726173102', 'YYYYMMDDHH24MISS' ) FROM dual
或者,要转换"Jul 26, 2005 17:13:05",我可以使用:
SELECT TO_DATE('Jul 26, 2005 17:13:05', 'Mon DD, YYYY HH24:MI:SS') FROM dual
注意: 对于 TIMESTAMP 类型,等价函数为 TO_TIMESTAMP。
更改默认的日期格式。 默认情况下,Oracle 根据 NLS_DATE_FORMAT 参数中定义的格式掩码显示 DATE 类型。
可以在如下所示的会话中更改此默认日期格式:
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'
日期运算。 为确定 2005 年 7 月 26 日 6 天后的日期,只要将值 6 与 DATE 对象相加:
- SELECT TO_DATE( '20050726173102', 'YYYYMMDDHH24MISS' ) + 6 FROM dual
- /* e.g. 2005-08-01 17:13:05 */
SELECT TO_DATE( '20050726173102', 'YYYYMMDDHH24MISS' ) + 6 FROM dual /* e.g. 2005-08-01 17:13:05 */
此类操作的最小整数单位是一天。 为减去 18 个小时,需要日期的相应小数:
- SELECT TO_DATE( '20050726173102', 'YYYYMMDDHH24MISS' ) - (1/24 * 18) FROM dual
- /* e.g. 2005-07-25 23:31:02 */
SELECT TO_DATE( '20050726173102', 'YYYYMMDDHH24MISS' ) - (1/24 * 18) FROM dual /* e.g. 2005-07-25 23:31:02 */
同样,要加上 59 秒:
SELECT TO_DATE( '20050726173102', 'YYYYMMDDHH24MISS' ) + (1/(24*60*60) * 59) FROM dual
在处理月份或年份时,由于两者均不能用常数天数表示(注意具有不同天数的闰年和闰月),因此需要 ADD_MONTHS 函数。 将 12 个月与某个日期相加:
- SELECT ADD_MONTHS( TO_DATE( '20050726173102', 'YYYYMMDDHH24MISS' ),
- 12) FROM dual
- /* e.g. 2006-07-26 17:31:02 */
SELECT ADD_MONTHS( TO_DATE( '20050726173102', 'YYYYMMDDHH24MISS' ), 12) FROM dual /* e.g. 2006-07-26 17:31:02 */
注意: 要减去月数,请使用减号。
LAST_DAY 函数返回 DATE 类型的月份的最后一天:
SELECT LAST_DAY( TO_DATE( '20050701', 'YYYYMMDD' ) ) FROM dual /* e.g. 2005-07-31 00:00:00 */
TRUNC 函数根据提供的日期掩码(即第二个参数),对 DATE 进行向下取整。 如果在进行 DATE
比较时需要从比较中消除秒和分钟这样的单位,可以使用该函数:
- SELECT TRUNC( TO_DATE( '20050726173102', 'YYYYMMDDHH24MISS' ), 'DD' ) FROM dual
- /* e.g. 2005-07-26 00:00:00 */
SELECT TRUNC( TO_DATE( '20050726173102', 'YYYYMMDDHH24MISS' ), 'DD' ) FROM dual /* e.g. 2005-07-26 00:00:00 */
如果未提供日期掩码,TRUNC 将对 DATE 向下取整到它所表示的日的起始。
其他与日期相关的函数包括 MONTHS_BETWEEN(用于计算两个 DATE
类型之间的月数的整数差)、NEXT_DAY(用于获取与某个字符串文字(例如,"MONDAY")匹配的下一个星期几的 DATE 类型)以及
ROUND(类似于 TRUNC,但按就近取整原则返回最近 DATE)。
使用 Date 构建 SQL 语句
下面是一些在 SQL 语句中使用 DATE 类型,使用"emp"(员工)表(Oracle 中附带的示例数据的一部分)的示例。
"em"表的"hiredate"列使用 DATE 类型存储值。
找到在两个日期之间被辞退的所有员工:
- SELECT
- ename, TO_CHAR(hiredate, 'ddth Mon, YYYY')
- FROM
- emp
- WHERE
- hiredate
- BETWEEN
- TO_DATE('1980-01-01','YYYY-MM-DD')
- AND
- TO_DATE('1985-01-01','YYYY-MM-DD')
- ORDER BY
- hiredate
- DESC
添加一个新员工:
- INSERT INTO emp
- (
- empno,
- ename,
- job,
- mgr,
- hiredate,
- sal,
- deptno
- )
- VALUES
- (
- 8002,
- 'JOHNSON',
- 'ANALYST',
- 7566,
- TO_DATE('2005-07-22','YYYY-MM-DD'),
- 3000,
- 20
- )
使用从 TO_YMINTERVAL 函数返回的 INTERVAL 类型找到所有在公司的工作时间超过 15 年的员工:
发表评论
-
Oracle的锁机制归纳总结
2008-12-13 11:29 7595锁是防止在两个 ... -
oracle数据库锁的概念
2008-12-13 10:47 4668为了确保并发用户在存取同一数据库对象时的正确性(即无丢失修改、 ... -
oracle分页
2008-10-21 16:09 875Oracle的rownum字段是个比较奇怪的字段。拿一张有26 ... -
oracle中时间字段查询
2008-06-22 15:56 2154一.TimeStamp类型字段: select ca ... -
采用过程实现数据库约束完整性
2008-06-22 15:38 1061约束的完整性,是数据库所具有的一大特性,但在最近的 ... -
数据库批处理的几种方法
2008-06-16 21:18 3672首先,要关闭数据库连接的自动提交。否则就不叫批处理了。 co ... -
oracle中自增长列的生成方案
2008-05-18 23:38 1334最近遇到一个 ... -
oracle-序列(SEQUENCE)
2008-04-29 12:50 8643在oracle中sequence就是所谓的序列号, ... -
oracle 存储过程的基本语法
2008-04-28 17:54 13051.基本结构 CREATE OR REPLACE PROC ... -
Oracle SQL语句优化技术分析
2008-03-31 13:58 854操作符优化 IN 操作符 用IN写出来的SQL的优点是比较容易 ... -
Oracle中一个日期查找的误区
2008-03-31 11:50 1082经常要在数据中检索近一个月来发生的数据,所以采用如下语句 ... -
Oracle快速删除重复的记录
2008-03-31 11:33 971做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都 ... -
“数字公交”项目中的oracle开发技巧
2008-03-31 10:41 939参与进"数字公交"项目已经有一个多月了,我 ... -
Oracle的25条基本知识
2008-03-31 10:33 1145Oracle 基本知识轻松学: 1.一个表空间只能属于一个数据 ... -
深入浅出:数据库设计模式范例
2008-03-31 10:22 1368关系数据库设计之时是 ... -
简单提高ORACLE数据库的查询统计速度
2008-03-31 10:19 1186大型数据库系统中往往要用到查询统计,但是对于数据量大的系统,用 ... -
Oracle数据库系统使用经验六则
2008-03-30 11:11 8421.having 子句的用法 having ... -
Oracle数据库字段上建立索引
2008-03-30 11:08 1084当where子句对某一列使用函数时,除非利用这个简单的技术强制 ... -
Oracle中实现搜索分页查询
2008-03-28 12:32 1131在构建自定义搜索引擎时,开发人员常遇到的一个问题是实现某种类型 ... -
关于Oracle数据库中的锁机制深入研究
2008-03-28 11:34 1251本文通过对Oracle数据库 ...
相关推荐
Oracle 日期和时间处理函数提供了多种方式来处理日期和时间,包括日期和字符转换、日期语言设置、日期间的天数、时间为空的用法、日期范围查询、日期格式冲突问题、计算日期间的天数和计算月份之间的天数等。
本章节详细介绍了 Oracle 日期和时间的存储与处理,包括使用 DATE 类型存储日期和时间、使用时间戳(timestamp)存储日期和时间、使用时间间隔(interval)存储时间的长度,以及存储和检索日期的简单例子。
Oracle 日期函数是 Oracle 数据库中的一组功能强大且广泛使用的函数,它们可以对日期进行各种操作和计算,本次练习涵盖了 Oracle 中常用的日期函数,包括获取当前系统时间、对日期的月进行加减、获取给定日期所在月...
Oracle 日期及时间格式是 Oracle 编程语言中一个非常重要的组成部分,了解 Oracle 日期及时间格式可以帮助开发者更好地处理日期及时间相关的操作,提高数据的存储和检索效率,提高报表的可读性和可维护性。
针对标题"oracle日期时间判断函数"和描述中提到的内容,我们可以深入探讨两个关键的函数,它们主要用于判断字符串是否可以转换为合法的日期时间格式。 1. TO_DATE函数: TO_DATE是Oracle中用于将字符串转换为日期...
2. 日期和时间的基本运算:Oracle 提供了多种日期和时间的基本运算符,例如:`+`、`-`、`*`、`/` 等,可以对日期和时间进行加、减、乘、除等运算。 3. 日期和时间的格式化:使用 `to_char` 函数可以将日期和时间...
### Oracle日期时间类型详解 #### 一、概述 在Oracle数据库中,并不存在`datetime`这一数据类型,而是通过`date`类型来实现日期与时间的综合处理。`date`类型可以表示日期和时间,它固定占用7个字节的空间。本篇...
ORACLE日期时间函数大全
### Oracle日期查询相关知识点 #### 一、获取系统当前日期与时间 在Oracle数据库中,可以通过`SYSDATE`函数来获取系统的当前日期和时间。这是一个非常实用的功能,尤其是在需要记录数据的操作时间点时。 **示例:...
ORACLE 中日期和时间函数汇总 Oracle 中的日期和时间函数是数据库管理系统中非常重要的一部分,掌握这些函数可以帮助开发者和 DBA 更好地处理日期和时间相关的操作。 日期和字符转换函数 Oracle 中提供了两个...
Oracle日期与时间拼接函数以及时间处理函数- -干货 1.时间处理函数 在工作过程中是否有遇到源数据的时间存储为Integer类型的时间格式,如下: 序号 T_TIME_1 1 63272 2 55066 3 55975 4 31394 5 ...
Oracle 日期处理函数是数据库管理系统中非常重要的一部分,最近看到有人在做 T-SQL 与 PL/SQL 的转化,问了些有关时间函数的处理。在 PL/SQL 中,Oracle 提供了其他的方法来处理日期函数,例如 DATE_ADD 函数。在 T-...
oracle 日期时间操作,oracle 日期时间
最后,提供的文档和文本文件,如"oracle日期和时间处理汇总.doc"、"Oracle聚合函数RANK和dense_rank的使用.htm"等,都是极好的学习资源,可以深入研究每个函数的详细信息和示例。通过阅读和实践,你将能够充分利用...
在Oracle数据库中,我们可以方便地执行日期时间的间隔操作,比如对当前时间进行增减指定的时间间隔。 **1. 当前时间减去7分钟的时间** ```sql SELECT SYSDATE, SYSDATE - INTERVAL '7' MINUTE FROM DUAL; ``` 此...
在Oracle数据库中,日期操作是常见的SQL查询任务,特别是在处理历史数据或进行时间相关的分析时。Oracle提供了丰富的函数来帮助用户对日期进行加减操作,这些功能强大且灵活的函数使得开发者能更精确地处理时间数据...
以下是对给定文件中提及的Oracle日期处理函数的详细说明: 1. **add_months(d, n)**: 此函数将日期d加上n个月,返回新的日期。例如,`add_months(SYSDATE,1)`会返回当前日期往后一个月的日期。 2. **last_day(d)**...
### Oracle日期时间数据类型与时间间隔数据类型详解 #### 23.1 概述:Oracle中的日期时间数据类型 在Oracle数据库中,日期时间数据类型主要包括`DATE`、`TIMESTAMP`及其变体(如`TIMESTAMP WITH TIME ZONE`、`...