2011-03-29 64 views
2

我正在将代码从Sybase更改为Oracle。 我在将以下查询转换为oracle时遇到问题。Sybase中的Sybase等效

Select Custodian_addr,convert(datetime,dateadd(ss,CreateDT,"01/01/1970") 

这里CreateDT是列名,其例如价值1015015173 日期转换(在这个例子中)的结果是2002年3月1日下午8时39 GMT

我研究后发现一个Oracle替代从而导致错误

Select Custodian_addr,to_char(CreateDT,"SS") 

我在Oracle中遇到查询错误,我无法识别出什么错误。因为我在Perl中执行此操作["]必须逃脱或可能是什么问题?请给我一个解决方案

回答

1
SELECT 'some address' as custodian_addr, 
    date '1970-01-01' + 1015015173/86400 as create_dt 
from dual 
/

CUSTODIAN_AD CREATE_DT 
------------ ------------------- 
some address 2002-03-01 20:39:33 

Oracle日期算法非常简单 - 将日期加1加1天。因此,由于该数字是秒,因此除以86400(60 * 60 * 24)将该数字表示为天数(及其分数)。

+0

@ Peter.Is有没有使用to_char的替代方案。 – user682571 2011-03-29 18:14:11

+0

@peter 1015015173 ----这可以设置为列名称日期'1970-01-01'+ field_name/864000)...将这项工作.. ?? – user682571 2011-03-29 18:22:17

+0

是的 - 我只是用你的价值为例。 – 2011-03-29 18:44:56

0

你得到的错误是什么?

您的TO_CHAR函数不应该使用双引号。它需要是

TO_CHAR(CreateDT,'SS') 

如果你在Oracle中使用双引号,它会被解释为标识符,而不是字符串常量。