首页 > 解决方案 > 不使用函数将 LONG 格式转换为 DATE

问题描述

该列HIGH_VALUE具有类似于下面的数据,类型为LONG,并且始终具有相同的长度:

TIMESTAMP' 2019-01-30 00:00:00'

如何在DATE不使用函数的情况下将其转换为类型?

我的总体目标是创建一个结果集,然后可以将其用作其他聚合的内部查询。例如,我希望能够根据将HIGH_VALUE列转换为日期产生的日期来总结一年中的行数。

我对此数据库只有读取权限,因此无法创建函数。我在 StackOverflow 和其他网站上看到过其他解决方案,但它们都需要创建一个函数。

ALL_TAB_PARTITIONS是标准的内置 Oracle 表,因此我不包括表结构。如果这是一个问题,请告诉我,我将创建一个示例表。

下面是一个示例查询和由此查询产生的一行数据。请注意,我无法在此数据库上创建表,因此我还需要一种无需创建临时表即可工作的方法。

Insert into EXPORT_TABLE (TABLE_OWNER,TABLE_NAME,PARTITION_NAME,HIGH_VALUE,NUM_ROWS) 
VALUES ('TO','TN','SYS_P201709','TIMESTAMP'' 2019-01-30 00:00:00''',5053133);

SELECT TABLE_OWNER, TABLE_NAME, PARTITION_NAME, HIGH_VALUE, NUM_ROWS
from ALL_TAB_PARTITIONS;

标签: oracleoracle12coracle18c

解决方案


如果您使用的是 Oracle 12c,您仍然可以使用函数但内联定义:

WITH FUNCTION with_function(p_id IN NUMBER) RETURN NUMBER IS
BEGIN
    -- logic here
    RETURN p_id;
END;
SELECT with_function(id)
FROM   your_table

相关:Oracle Database 12c 第 1 版 (12.1) 中的 WITH 子句增强


推荐阅读