请教一个时间转化问题。。。
现在在数据库中日期保存的是数字字串(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




