【问题标题】:Sybase equivalent in OracleOracle 中的 Sybase 等效项
【发布时间】:2011-07-25 12:08:46
【问题描述】:

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

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

这里CreateDT 是列名,例如其值为1015015173 日期转换的结果(对于本示例)是 2002 年 3 月 1 日 8:39 PM GMT

我研究并发现了一个导致错误的 oracle 替代方案

Select Custodian_addr,to_char(CreateDT,"SS")

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

【问题讨论】:

    标签: oracle sybase


    【解决方案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) 会将该数字转换为天数(及其分数)。

    【讨论】:

    • @Peter.有没有其他使用 to_char 的替代方法。
    • @peter 1015015173 ----这可以设置为列名日期'1970-01-01' +field_name/864000)...这行得通吗..??
    • 是的 - 我只是用你的值作为例子。
    • SQL> 从双重中选择日期'1970-01-01' + 1015015173/86400; DATE'1970 --------- 01-MAR-02 我没有得到时间戳
    【解决方案2】:

    你得到什么错误?

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

    TO_CHAR(CreateDT,'SS')
    

    如果您在 Oracle 中将某些内容放在双引号中,它将被解释为标识符,而不是字符串常量。

    【讨论】:

      猜你喜欢
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      相关资源
      最近更新 更多