如何将hex'YMD'日期转换为可读日期?

时间:2010-11-09 01:07:58

标签: sql date hex

我收到了一个包含大量日期的文件。它们是十六进制格式,我被告知它是YMD。

例如:4A273F

..知道如何转换它吗?想要使用SQL / PLSQL,但我对其他想法持开放态度。

谢谢!

3 个答案:

答案 0 :(得分:1)

Oracle和java相互之间相当不错,如果你感觉很冒昧,这可能是一个新想法。 Java很容易做到这一点,但是我远离了一个oracle盒子并且无法测试。这真的很痛,我现在不在甲骨文机前。为了确保我记得正确,我从这里开始使用步骤  http://www.dba-oracle.com/tips_oracle_sqlj_loadjava.htm

然后我用Google搜索了这个,这几乎是一字不差地说明我们将在下面做什么: http://docstore.mik.ua/orelly/oracle/guide8i/ch09_03.htm

/****
*java and oracle playing together.
 */
import java.util.Date;
public class hex2Date{
   //this is if you want to call the java function from a command line outside of oracle
     public static void main (String args[]) {
         System.out.println ( convert (args[0]) );    
    }

     public static Date convert(String inHexString){
       try{
        Date dateResult = new Date(Long.parseLong(inHexString,16));
       }catch (NumberFormatException e){
       // do something with the exception if you want, recommend at least throwing it.
    //throw(e,'some extra message');

       }

        return dateResult;
   }
}

将该文件保存为'yourJava'目录中的Hex2Date.java,并从该目录中的cmd行输出:

javac Hex2Date.java

现在输入:

java Hex2Date.java 0x4A273F

如果你得到了正确的日期和结果,让我们告诉oracle我们的小功能。 你首先需要一些用户权利: GRANT JAVAUSERPRIV给您的用户; 输入: loadjava -user scott / tiger -resolve Hex2Date.class

现在将它包装在pl / sql中,因此您可以在pl / sql中调用它。:

/* java function plsql wrapper: hex2Date.sf */ 
CREATE OR REPLACE FUNCTION hex2Date (    inHexString IN VARCHAR2)     RETURN DATE AS LANGUAGE JAVA    NAME 'Hex2Date.convert(java.lang.String)              return Date'; /

现在,从sql提示符运行它: SQL> exec DBMS_OUTPUT.PUT_LINE(hex2Date('0x4A273F'))

答案 1 :(得分:0)

我猜他们是unix日期?我还猜你可以通过 SQL / PLSQL访问SQL Server和Oracle吗?如果我猜对了,我会使用SQL Server的转换函数:

选择convert(int,0x4A273F)

以及它的日期添加功能(从1970年1月1日开始并添加秒数):

选择dateadd(ss,{your_result},'19700101')

当然,如果它们都在csv文件中,那么脚本也可以。你有更多的信息吗?

答案 2 :(得分:0)

如果'HEX'值来自大型机,那么它们可能是EBCDIC(扩展二进制编码的十进制交换码)而不是HEX?我现在没有时间推理它,但试试这个页面的想法/线索? http://www.simotime.com/asc2ebc1.htm当然,我可能正在咆哮错误的树:)

假设50 34 2E是2009年4月27日

EBCDIC HEX DEC
5      F5  245
0      F0  240
3      F3  243
4      F4  244
2      F2  242
E      C5  197