【问题标题】:Expected TIMESTAMP got NUMBER error预期的 TIMESTAMP 出现 NUMBER 错误
【发布时间】:2014-04-18 02:19:45
【问题描述】:

我有两列,一列是 NUMBER_COLUMN(带有数字数据类型),另一列是不同表中的 TIMESTAMP_COLUMN(带有时间戳数据类型)。 我需要将 number_column 值转换为 TIMESTAMP 数据格式,以便验证它们的值。我得到了转换的有效代码——见下文。

CAST(LAST_DAY(to_timestamp(lpad(cast(NUMBER_COLUMN as varchar2(6)), 6, '0'), 'MMYYYY')) AS TIMESTAMP)

我在 select 语句中使用上述查询将 NUMBER_column 数据值转换为与我的 timestamp_column 数据格式对应的格式。 然后我有一个 NOT EXISTS 块,它基本上是另一个以结尾的 select 语句 其中 NUMBER_COLUMN=TIMESTAMP_COLUMN。但是这最后一个条件给了我一个错误“TIMESTAMP GOT NUMBER”。脚本见下文。

SELECT CAST(LAST_DAY(to_timestamp(lpad(cast(NUMBER_COLUMN as varchar2(6)), 6, '0'), 'MMYYYY')) AS TIMESTAMP) AS NUMBER_COLUMN FROM TAB1 T1
WHERE NOT EXISTS(SELECT P.TIMESTAMP_COLUMN FROM 
                 (SELECT TIMESTAMP_COLUMN FROM TAB2)
                 WHERE P.TIMESTAMP=T1.NUMBER_COLUMN);

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    我认为问题在于您的别名和列名相同,因此当您引用 t1.number_column 时,它被理解为实际数字列,而不是计算出的时间戳值。此外,您不能在相关子查询中使用列的别名。所以,这应该工作:

    SELECT CAST(LAST_DAY(to_timestamp(lpad(cast(NUMBER_COLUMN as varchar2(6)), 6, '0'), 'MMYYYY')) AS TIMESTAMP) AS NUMBER_COLUMN_ALIAS FROM TAB1 T1
    WHERE NOT EXISTS(SELECT TIMESTAMP_COLUMN FROM 
                     (SELECT TIMESTAMP_COLUMN FROM TAB2)
                     WHERE TIMESTAMP_COLUMN=CAST(LAST_DAY(to_timestamp(lpad(cast(NUMBER_COLUMN as   varchar2(6)), 6, '0'), 'MMYYYY')) AS TIMESTAMP));
    

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多