预计TIMESTAMP出现NUMBER错误

时间:2014-04-17 17:30:49

标签: sql oracle

我有两列,一列是NUMBER_COLUMN(带数字数据类型),另一列是不同表中的TIMESTAMP_COLUMN(带有timestamp数据类型)。 我需要将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);

1 个答案:

答案 0 :(得分: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));