CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  开发

请教一个时间转化问题。。。

楼主langzitcm(长长)2004-07-01 22:42:48 在 Oracle / 开发 提问

现在在数据库中日期保存的是数字字串(PHP里面的时间戳)   现在要在存储过程里处理成直观的时间(如:20040701   22:46:12)不知道怎么处理     不知道Orcale是否有相应的函数求教。还有我是否可以在存储过程里将直观的时间转化成时间戳保存到数据库里。。。。请大伙帮我想想可行的办法。。。谢谢! 问题点数:100、回复次数:7Top

1 楼which(which)回复于 2004-07-01 22:47:01 得分 10

用to_date函数啊,不知道你那个时间戳是什么格式  
  而且如果你就想保存当前系统时间的话,可以用oracle的sysdate  
  没有必要用php的时间戳Top

2 楼langzitcm(长长)回复于 2004-07-01 22:53:07 得分 0

时间戳:一个整数=当前时间到1970年1月1日0分0秒的秒数;  
  我现在一边是网站   一边SP     网站是这样     所以要统一起来     不然网站的修改会很大。Top

3 楼beckhambobo(beckham)回复于 2004-07-01 23:20:54 得分 30

做一个函数转换  
  create   function   is_date(p_date   number)  
  return   date  
  is  
  v_date   date;  
  begin  
  v_date:=to_date(to_char(p_date),'yyyymmddhh24miss');   --格式视数值而定  
  return   v_date;  
  end;  
  /  
  select   sysdate-is_date(col_date)*24*60*60   时间戳   from   table_name;Top

4 楼CodeMagic(ErrorDetector)回复于 2004-07-02 00:13:43 得分 40

1   建立一个函数,函数的参数num为时间戳的值  
   
  create   or   replace   function   getdate(num   number)   return   date   is  
      y   number(4);  
      m   number(2);  
      d   number(2);  
      h   number(2);  
      s   number(2);  
      mi   number(2);  
      val   number(10);  
      totalday   number(18,6);  
       
      dat   date;  
  begin  
      val:=num;  
      y:=floor(val/(365*12*24*60*60));    
      val:=mod(val,365*12*24*60*60);  
       
      m:=floor(val/(12*24*60*60));    
      val:=mod(val,12*24*60*60);      
       
      d:=floor(val/(24*60*60));    
      val:=mod(val,24*60*60);      
       
      h:=floor(val/(60*60));    
      val:=mod(val,60*60);  
       
      mi:=floor(val/60);    
      val:=mod(val,60);  
       
      s:=val;  
       
      totalday:=y*365+m*12+d+h/24+mi/(24*60)+s/(24*60*60);  
       
      dat:=to_date('1970-01-01   00:00:00','yyyy-mm-dd   hh24:mi:ss')+totalday;      
       
      dbms_output.put_line(dat);  
      return   dat;  
  end;  
   
  2   在sqlplus中   先输入   Set   ServerOutput   on,然后这么调用函数  
  declare  
      d   date;  
  begin  
      d:=getdate(&d);  
      dbms_output.put_line(d);  
  end;  
  /  
   
  3   sqlplus提示输入d的值,然后输入时间戳的值即可。Top

5 楼dinya2003(OK)回复于 2004-07-02 08:26:05 得分 10

你现在的字段是数据字段,想转换成20040701   22:46:12这样的日期格式,但是20040701   22:46:12可以存在数字字段中吗?  
  select   to_date(to_char(字段),'yyyymmdd   hh24:mi:ss')   from   tableTop

6 楼which(which)回复于 2004-07-02 09:00:14 得分 10

CodeMagic(写错了吧)   写得不错,佩服Top

7 楼langzitcm(长长)回复于 2004-07-02 10:05:28 得分 0

谢谢各位的鼎力支持,我现在以找到了方法,可能会有写修正,经过测试也是行:  
  (1)系统时间转化时间戳  
  tempstr:=to_char(sysdate,'yyyy-mm-dd   HH24:mi:ss');--当前系统时间格式转化  
  --获取当前时间到时间戳0点的时间差   (单位:天,一般带小数的,用字符串来处理)  
  tempstr:=to_char(to_number(to_date(tempstr,'yyyy-mm-dd   HH24:mi:ss')-to_date('1970-1-1   8:0:0','yyyy-mm-dd   HH24:mi:ss')));  
  tempstr:=to_char(to_number(tempstr)*24*3600);--时间差转化成秒数(有待去掉小数位)  
  dbms_output.put_line('系统时间的时间戳:'||tempstr);---系统时间的时间戳  
  (2)时间戳直观化  
  TimeNumber:=1088728528;--时间戳初始值  
  tempstr:=to_char(TimeNumber/(24*3600));---转化为天数  
  dbms_output.put_line('当前时间:'||to_char(to_date('1970-01-01   08:0:0','yyyy-mm-dd   HH24:mi:ss')+to_number(tempstr),'yyyy-mm-dd   HH24:mi:ss'));  
  请各位指教指教!  
   
  Top

相关问题

  • 时间转化!
  • 时间转化的问题
  • 时间转化问题
  • 时间转化问题
  • 时间转化问题
  • 如何把时间转化为数字
  • 字符串如何转化为时间
  • 转化
  • 如何将JSP中DATE()转化成BIGINT类型啊,我对JSP的时间转化不熟,请多指教!!
  • 时间类型转化问题!提示不能转化为String 类型,哪位帮忙看看

关键词

  • 转化
  • 函数
  • 字段
  • date
  • 系统
  • dbms
  • 网站
  • val
  • 时间
  • tempstr

得分解答快速导航

  • 帖主:langzitcm
  • which
  • beckhambobo
  • CodeMagic
  • dinya2003
  • which

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo