中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > 数据库综合
从Unix到Oracle的日期转换
作者:佚名 时间:2004-07-11 10:40 出处:互连网 责编:chinaitpower
              摘要:从Unix到Oracle的日期转换

  CREATE OR REPLACE FUNCTION Unix_To_Oracle_Date
  (
    p_unix_date IN NUMBER, -- Range of >= 0
    p_num_hr_gmt_diff IN PLS_INTEGER  -- Range of -24 to +24
  
  ) RETURN DATE AS
  
  /*
    Function Name:  Unix_To_Oracle_Date
  
    Purpose:     To calculate an Oracle date based on a Unix GMT date
             in seconds, since the epoch of Unix (January 1st, 1970).
  
             The date returned will be based on the number of hours
             the oracle database system clock is either ahead or behind
             the Greenwich Mean Time line.
  
             If the parameters do not fall within the specified ranges
             then the returned date will be NULL.
  
    Developer Name:  Giovanni Jaramillo
    Developer Email: Giovanni@CheckOut.com
    Creation Date:  Copyright ? CheckOut.com December 2, 1999
  
    Parameters:    p_unix_date of NUMBER type (Range is > 0 only)
             p_num_hr_gmt_diff of PLS_INTEGER type (Range -24 to +24)
  
    Input:      NONE
    Output:      NONE
    Returned value:  DATE := Unix_To_Oracle_Date(p_Unix_Date);
  
  */
  
    -- CONSTANTS
  
    -- These 2 CONSTANTS below are of POSITIVE type to indicate that they
    -- CANNOT be less than 1
  
    c_SECONDS_IN_DAY CONSTANT POSITIVE := 86400;
    c_HOURS_IN_DAY CONSTANT POSITIVE := 24;
  
  
    c_UNIX_EPOCH_DATE_TIME_STRING CONSTANT VARCHAR2(50) := '01/01/1970 00:00:00';
    c_DATE_FORMAT CONSTANT VARCHAR2(50) := 'MM/DD/YYYY HH24:MI:SS';
  
    -- VARIABLES
  
    v_sql_code PLS_INTEGER;
    v_sql_error_message VARCHAR2(512);
  
    -- The 2 variables have to be of NUMBER type because a PLS_INTEGER divided by
    -- another PLS_INTEGER can result in a fraction, thus the result must be of
    -- NUMBER type only
  
    v_unix_seconds NUMBER;
    v_gmt_time_gap NUMBER;
  
    v_return_value DATE;
  
  BEGIN
  
    IF(NOT (p_num_hr_gmt_diff < (-c_HOURS_IN_DAY)) AND
     NOT (p_num_hr_gmt_diff > (c_HOURS_IN_DAY))) THEN
  
     v_unix_seconds := (p_unix_date / c_SECONDS_IN_DAY);
     v_gmt_time_gap := (p_num_hr_gmt_diff / c_HOURS_IN_DAY);
  
     v_return_value := TO_DATE(c_UNIX_EPOCH_DATE_TIME_STRING, c_DATE_FORMAT) +
              v_unix_seconds + v_gmt_time_gap;
    ELSE
     v_return_value := NULL;
    END IF;
  
    RETURN(v_return_value);
  
  EXCEPTION
  
    WHEN OTHERS THEN
     v_sql_code := SQLCODE;
     v_sql_error_message := SQLERRM(v_sql_code);
  
     DBMS_OUTPUT.PUT_LINE('OTHER ERROR');
     DBMS_OUTPUT.PUT_LINE(v_sql_error_message);
  
  END Unix_To_Oracle_Date;
  
  
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有