oracle number转为timestamp timestamp转number

oracle number转为timestamp timestamp转number现在平台有个字段是用来记录插入时间的,但是是用number型存储,想转为时间类型的。结果:SELECTTO_CHAR(字段名/(1000*60*60*24)+TO_DATE(‘1970-01-0108:00:00′,’YYYY-MM-DDHH24:MI:SS’),’YYYY-MM-DDHH24:MI:SS’)ASCDATE FROM表名;解决

大家好,又见面了,我是你们的朋友全栈君。

现在平台有个字段是用来记录插入时间的,但是是用number型存储,想转为时间类型的。
结果:
SELECT TO_CHAR(字段名 / (1000 * 60 * 60 * 24) + TO_DATE(‘1970-01-01 08:00:00’, ‘YYYY-MM-DD HH24:MI:SS’), ‘YYYY-MM-DD HH24:MI:SS’) AS CDATE   FROM 表名;
解决问题的过程:
http://blog.csdn.net/a9529lty/article/details/5306622

ORACLE 毫秒转换为日期 日期转换毫秒
日期转换毫秒
SELECT TO_NUMBER(sysdate –  TO_DATE(‘1970-01-01 8:0:0’, ‘YYYY-MM-DD HH24:MI:SS’)) * 24 * 60 * 60 * 1000  FROM DUAL;
SELECT TO_NUMBER(TO_DATE(‘2005-03-29 12:30:45’, ‘YYYY-MM-DD HH24:MI:SS’) –  TO_DATE(‘1970-01-01 8:0:0’, ‘YYYY-MM-DD HH24:MI:SS’)) * 24 * 60 * 60 * 1000  FROM DUAL;

毫秒转换日期
SELECT TO_CHAR(1112070645000 / (1000 * 60 * 60 * 24) +  TO_DATE(‘1970-01-01 08:00:00’, ‘YYYY-MM-DD HH24:MI:SS’), ‘YYYY-MM-DD HH24:MI:SS’) AS CDATE   FROM DUAL;
SELECT TO_CHAR(1336986532000  / (1000 * 60 * 60 * 24) + TO_DATE(‘1970-01-01 08:00:00’, ‘YYYY-MM-DD HH24:MI:SS’), ‘YYYY-MM-DD HH24:MI:SS’) AS CDATE   FROM dual ;

在Oracle中,默认没有直接提供获取当前时间的毫秒数的相关function,所以要想在SQL里面获得毫秒数,只好手动计算

SQL> select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) current_date, (sysdate- to_date(‘1970-01-01′,’yyyy-mm-dd’)) * 86400000 current_milli from dual;

CURRENT_DATE              CURRENT_MILLI
——————-                    ————-
2009-01-06 14:00:09       1231250409000
–1000*60*60*24一天毫秒数 = 86400000
方法:
日期a- 日期b=相差天数.
一天毫秒数 = 1000*60*60*24(86400000)
select to_char(sysdate, ‘yyyy-mm-dd hh24:mi:ss’) current_date,(sysdate – to_date(‘1970-01-01′,’yyyy-MM-dd’)) * 86400000 current_milli  from dual;
select to_date(‘1970-01-01′,’yyyy-MM-dd’)+1261674301000/86400000 from dual;
select to_date(‘1970-01-01′,’yyyy-MM-dd’)+当前日期的毫秒数/86400000 from dual;
http://space.itpub.net/8554499/viewspace-659931

ORACLE中用SQL实现时间日期由毫秒数到字符串的转换
在开发过程中,为了方便,经常将时间日期的毫秒数以整形的格式存到数据库中,虽然方便了不同地方的处理,但也会增加些麻烦。比如,我要到数据库里直接看某个时间的值,都是一长串的数字,鬼都看不懂,想到看到该字段的值,还要写个转换程序,把毫秒数在转换成日期时间类型,或者拿个计算器来算。要查看的记录少,还能将就,如果多了,那不崩溃才怪呢。于是想到了在SQL里直接转换的方法,还好牛人多,在网上搜了一下,还真有相关的东西,原始的语句如下: 
SELECT TO_CHAR(SYSDATE,’YYYY-MM-DD HH24:MI:SS’) CURRENT_DATE, (SYSDATE- TO_DATE(‘1970-01-01′,’YYYY-MM-DD’)) * 86400000 CURRENT_MILLI FROM DUAL;

这只是个例子,还不能直接解决上面的问题,所有就改了一下,是以自定义函数的形式存在的,代码如下:
CREATE OR REPLACE FUNCTION DATELONG2TEXT (PARAM IN LONG) RETURN VARCHAR2 AS
V_TEXT VARCHAR2(64);
BEGIN
SELECT TO_CHAR(TO_DATE(‘1970-01-01’, ‘YYYY-MM-DD’)+(PARAM/(24*60*60*1000) + 8/24 – 1/86400),’YYYY-MM-DD HH24:MI:SS’) INTO V_TEXT FROM DUAL;
RETURN V_TEXT;
END DATELONG2TEXT;
使用示例:
SELECT TO_CHAR(SYSDATE, ‘YYYY-MM-DD HH24:MI:SS’),SYSDATE,DATELONG2TEXT((SYSDATE – 8 / 24 – TO_DATE(‘1970-01-01’, ‘YYYY-MM-DD’)) * 86400000) FROM DUAL;
说明:
1、加上 8/24 ,是因为时间格式是GMT,结果会受时区的影响,我们在东8区,所以要加上8个小时 ;
2、减1/86400,至于为什么,我也说不清楚,只是在实际当中确实多了1秒,只好以这种方式减去了,根据时间情况确定是否进行调整。
当然,我们也可以类似的写出将日期由字符串转换成毫秒数的函数。

http://hi.baidu.com/78347079/blog/item/14a05afd868d291f08244d15.html

ORACLE自动插入当前时间的年月日YYYY-MM-DD格式的实现

oracle没有date()函数,sysdate函数的值是包括时分秒的,要实现插入当前时间默认值还真麻烦.

只好自己写储存过程,而字段默认值里面又不能调用储存过程,还得写个触发器!而储存过程里面取出来的sysdate前几位的只却变成17-11月-07的格式了,不是自己想要的,2007-11-17的格式,又得单独取年月日再组合起来,这样一来返回值就不能是日期类型而要字符类型了.

一个字,烦!不过还是把他实现了.下面把代码给大家分享一下,如果有更好的方法麻烦告知.

1.储存过程

CREATE OR REPLACE FUNCTION “GET_DATE” RETURN VARCHAR2

IS

   yyyy     varchar2(36);

   mm     varchar2(36);

   dd     varchar2(36);

   tempdate   varchar2(36);

BEGIN

tempdate := ”;

select to_char(to_date(sysdate),’YYYY’) into yyyy from dual;

select to_char(to_date(sysdate),’MM’) into mm from dual;

select to_char(to_date(sysdate),’DD’) into dd from dual;

tempdate := substr(yyyy,1,4)|| ‘-‘||

substr(mm,1,2)|| ‘-‘||

substr(dd,1,2)

;

return tempdate;

END;

2.触发器

CREATE OR REPLACE TRIGGER STATWEEK_tg

–STATWEEK fdate 的触发器

BEFORE INSERT ON STATWEEK FOR EACH ROW

BEGIN

       SELECT get_date INTO :NEW.fdate FROM DUAL;

END;

注:这里的STATWEEK为对应的数据表 fdate为自动增长的字段,get_date为对应的储存过程名.

3.数据表

— Create table

create table STATWEEK

(

星期一   VARCHAR2(20) default 0,

星期二   VARCHAR2(20) default 0,

星期三   VARCHAR2(20) default 0,

星期四   VARCHAR2(20) default 0,

星期五   VARCHAR2(20) default 0,

星期六   VARCHAR2(20) default 0,

星期日   VARCHAR2(20) default 0,

TWEEK VARCHAR2(10),

ADMIN VARCHAR2(50),

FDATE VARCHAR2(20)

)

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163916.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 手机看Typora笔记[通俗易懂]

    接触Typora之后感觉还挺好用的,不用上网,不用花钱(白嫖的玩意就是香)。可以写普通的文本,可以添加五个等级的标题,可以插入图片,,还可以插入各种各样的代码块(java,c,html,css等等),简洁而强大。但是当初我以为只能在电脑上看的时候就觉得有点难受,玛德是我S13了,我还去网上搜了半天,看看有没有教程或者手机版的软件,有的还要付费,今天我恍然大悟,尼玛人家开发个软件怎么可能没想到这些东西呢,我真是S13卧槽。看图啥都懂了:别被坑钱和C币吧…

  • java给链表赋值_Java链表操作代码[通俗易懂]

    java给链表赋值_Java链表操作代码[通俗易懂]/****/packagecom.cherish.SwordRefersToOffer;/***@authoracer**/publicclasstest_22链表中倒数第k个节点{/****/publictest_22链表中倒数第k个节点(){//TODO自动生成的构造函数存根}publicstaticclassListNode{privateintval;ListNode…

  • 各代iphone尺寸_iphone屏幕尺寸比例是多少,iphone各代屏幕尺寸大小介绍

    各代iphone尺寸_iphone屏幕尺寸比例是多少,iphone各代屏幕尺寸大小介绍自2007年苹果发布第一代iPhone以来,到目前最新的iPhoneXS、XSMax,苹果累计发布了21款手机,涉及7款尺寸,8种分辨率。那么这么多的不同手机之间有什么内在联系吗?为什么在iPhone6代-8代之间,屏幕是4.7寸和5.5寸,而iPhoneXS和Max分别是5.8寸和6.5寸,他们之间有什么联系吗?XR为什么分辨率这么低,被吐槽是大果粒屏?仔细看完本文,你将对iPhone的设…

  • abstract修改方法

    abstract修改方法

    2021年12月31日
  • laravel报404错误与NGINX报404错误区别

    laravel报404错误与NGINX报404错误区别

  • 华为模拟器ensp命令_vmware命令大全

    华为模拟器ensp命令_vmware命令大全命令符从用户视图切换到系统视图system–view从系统视图切换到用户视图quit连入接口命令interfaceIP地址、子网掩码配置命令ipaddress接口IP信息查看命令displayipinterfacebriefIPv4路由表信息查询命令displayiprouting–table配置完成退回视图界面命令return命令自动补全快捷键【Tab】…

    2022年10月29日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号