我有两列,一列是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);
答案 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));