在工作中我碰到这样一个问题 session表需要用到timestamp的字段 在进行timestamp字段更新时出现了为题 比如需要对session的有效期增加 小时
采用 systimestamp + / 会丢失秒后的精度 感觉增加之后就变成了date型的样子 经过研究发现oracle 有个函数叫NUMTODSINTERVAL 可以解决这个问题 下面两个例子说明如何使用这个函数
增加一小时
SELECT to_char(systimestamp + NUMTODSINTERVAL( hour ) yyyy mm dd HH :mi:ss:ff ) to_char(systimestamp yyyy mm dd HH :mi:ss:ff ) FROM dual
增加一分钟
SELECT to_char(systimestamp + NUMTODSINTERVAL( minut ) yyyy mm dd HH :mi:ss:ff ) to_char(systimestamp yyyy mm dd HH :mi:ss:ff ) FROM dual
对numtodesignterval的原版解释如下
NUMTODSINTERVAL converts n to an INTERVAL DAY TO SECOND literal The argument n can be any NUMBER value or an expression that can be implicitly converted to a NUMBER value The argument interval_unit can be of CHAR VARCHAR NCHAR or NVARCHAR datatype The value for interval_unit specifies the unit of n and must resolve to one of the following string values:
DAY
HOUR
MINUTE
SECOND
lishixinzhi/Article/program/Oracle/201311/174161.可以在DOS下从系统获得时间戳
利用Dos命令取得时间戳:
C:\>echo %date%
2006-04-24 星期一
C:\>echo %date:~0,10%
接下来使用导出(exp)工具引用该时间戳就很容易了:
exp userid=eygle/eygle file=d:\eygle%date:~0,10%.dmp log=d:\eygle%date:~0,10%.log
是时间戳类型,参数6指的是表示秒的数字的小数点右边可以存储6位数字,最多9位。解决方法如下:
1、时间戳的概念:它是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
2、在oracle使用时间戳,一般都是为了方便计算时间差的,要知道oracle中的date类型想减是不能友好的得到时间的差值的。所以使用时间戳来得到两个时间差。
3、首先来看oracle中如何获得当前时间的时间戳,用当前时间减去计算机元年后再经过换算得到了的从1970年来到当前时间的时间戳,单位是微妙。
4、另外oracle提供了另一种便捷得到两个时间差的方式,那就是使用timestamp数据类型,它类似date类型,但是存储的时间更为精确,显示的格式:yyyy-mm-dd hh24:mi:ss.ff AM,其中ff是小数秒。
5、timestamp类型的时间差可读性也比上面那种好一些,可以直观看出两个时间差。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)