有时候想在数据库中存储插入数据时的时间,比如有一条评论,我想在把评论内容存入数据库的时候把存储评论时的时间也存到数据库中。当然这个过程是自动完成的,即不需要我在业务逻辑代码中还得初始化一个Date对象然后再把这个Date对象转换为某种格式存到数据库中。
Oracle提供了时间戳数据类型Timestamp来支持这个操作。当一个字段定义成Timestamp类型时,通过在insert语句中指定value为Sysdate就可以将执行insert语句时的时间存入数据库中。例如:
Create Table webcomments(
username varchar2(10) Default '匿名用户',
commenttime Timestamp, //指定为时间戳数据类型
);
Insert Into webcomments Values('test',Sysdate); //将当前时间存入到commenttime 字段
然后执行查询:
Select commenttime From webcomments;
结果显示commenttime 列的值是这种样子的:18-4月 -10 03.31.06.000000 下午
这和我们的预想不太相符。我们想查询出来的时间应该是这个样子的:2010-04-18 13:10:57
这要是用to_char函数,利用它我们可以把一个日期数据转换为任何我们想要的格式。例如这样写select语句:
Select to_char(commenttime,'yyyy-mm-dd hh24:mi:ss') From webcomments;
得到的结果是2010-04-18 15:31:06
要了解的一点是:如果单单是想存储时间的话,Oracle还提供了一种日期类型Date,使用它也可以存储插入数据时的时间,只要插入数据时也赋值为
Sysdate就可以。并且在查询时也一样可以使用to_char函数得到想要的格式。那问题就是:为什么我们要使用Timestamp类型呢?
date和Timestamp都是对日期和时间的表示,只是两种类型的精确度不同,前者精确到秒,后者精确到小数秒Timestamp数据的格式化显示和
Date数据一样。注意,to_char函数支持Date和Timestamp,但是trunc却不支持Timestamp数据类型。这已经清楚表明了在
当两个时
间的差别极度重要的情况下,使用Timestamp数据类型要比Date数据类型更确切。
并且:两个Date类型相减的结果是以“天”为单位的,而两个Timestamp类型相减的结果是直观的显示为“多少天+多少小时+多少分钟+多少秒+多少小数秒”。例如:
select to_timestamp('2006-01-02 13:40:20.2','yyyy-mm-dd hh24:mi:ss.ff'))- to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd hh24:mi:ss.ff') as test from dual;
查询结果显示(多少天 多少小时 多少分钟 多少秒 多少小数秒
):000000001 01:30:10.100000
最后,Date转换为Timestamp要使用CAST函数,例如:
select CAST(sysdate as Timestamp) from dual;
分享到:
相关推荐
时间戳转换工具,将oracle中的时间戳转换为时间格式。
最近收集了一些关于oracle时间算法的资料,觉得挺不错的,跟大家分享一下。
主要介绍了oracle数据库实现获取时间戳的无参函数的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
oracle timestamp详解 将常用的转换方法及使用注意事项都罗列出来了
1、备份Oracle数据库表时添加动态时间戳,解决了ORA-00922: missing or invalid option 错误。 2、备份表结构和数据,还备份索引、序列、触发器等对象,提高了备份速度。但需要手动备份原始表的序列。 3、备份策略是...
ETL,根据时间戳进行增量更新,建立在源表没有时间戳字段的基础上
kettle详细实现Oracle数据库通过时间戳方式数据增量同步案例
在Oracle 10g中,在行最后一次被更新的时候,每一行都有一个新的被称作ORA_ROWSCN的伪列。ORA_ROWSCN 提供了一个“保守上边界(conservative upper bound)”系统改变数,用来记录最近被修改的行的事务。这就意味着...
主要给大家介绍了关于Oracle如何获取系统当前时间等操作的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Oracle具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
1、备份Oracle数据库表时添加动态时间戳,解决了ORA-00922: missing or invalid option 错误和ORA-00922: 选项缺失或无效错误。 2、备份表结构和数据,还备份索引、序列、触发器等对象,提高了备份速度。但需要手动...
本文主要结合之前一次oracle迁移达梦的项目,将碰到的问题以及一系列踩过的坑列举出来供大家参考,数据库版本是达梦7。(本文中涉及到的部分对象名已用sch1,tab1等方式替换) 1、整体情况 迁移过程中失败任务数低于5%...
然后通过SCN_TO_TIMESTAMP函数可以将SCN转换为时间戳,从而找到最后DML操作时SCN的对应时间。但是,默认情况下,每行记录的ORA_ROWSCN是基于Block的,除非在建表的时候开启行级跟踪。 SELECT MAX(ORA_ROWSCN), SCN_...
oracle的备份和恢复语句整理
如果你要把mysql的数据导出到oracle或者sqlserver,那么就用到这个了,他能把mysql自己的时间格式转成对应sqlserver的日期格式,希望大家有用
在Oracle9i之前,虽然有一个NEW_TIME函数可以改变DATE的时间戳部分,但是还没有专门用来存储时区信息的数据类型。在Oracle9i中,我们可以使用DBTIMEZONE伪字段查询数据库的时区,使用 SESSIONTIMEZONE伪字段查询会话...
安装oracle10g遇到问题及解决办法
kettle实现数据库时间戳CDC,(时间戳中间表在oracle中,另一个版本在mysql中)这是一个oracle到mysql增量的ktr和kjb文件,请关注解压后的文件README.txt
第10章 日期和时间戳 255 第11章 记录类型 297 第12章 集合 313 第13章 其他数据类型 381 第4部分 pl/sql中的sql 第14章 dml和事务管理 423 第15章 数据提取 444 第16章 动态sql和动态pl...