-1

我想将列名转换为日期。例如列名是今天,我想将它动态转换为今天的日期,如 MM/DD/YYYY 。

4

2 回答 2

2

截至目前,列名是“今天”我希望它是当前日期

您不能将列配置为自动更改其名称。反映当天或其他任何情况。

但是,您可以在查询时使用别名来更改列名。为了使事情尽可能透明,您可能需要创建一个视图。这是一个例子:

-- Some table with a column  named "TODAY"
CREATE TABLE T AS (SELECT LEVEL today FROM DUAL CONNECT BY LEVEL < 5);


-- Use PL/SQL to create a view on the given table
-- with a dynamic column name
DECLARE
  today varchar(10) := TO_CHAR(SYSDATE,'DD/MM/YYYY');
  query varchar(200) := 'CREATE OR REPLACE VIEW V'
                     || ' AS SELECT today "' || today || '"'
                     || ' FROM T';
BEGIN
  execute immediate query;
END;

然后,要使用正确的列名查询“表” ,您只需查询V而不是T

SELECT * FROM V;

12/12/2014
1
2
3
4

如果您每天重新创建视图,例如通过从作业调用上述 PL/SQL 代码,您将每天看到以当前日期作为列名的视图。但是,由于基础表保持不变,您仍然可以使用规范名称查询它today。例如,如果您需要对该表执行联接,这很重要。


话虽如此,我不确定我是否会推动这样的解决方案。使用风险自负!

于 2014-12-12T22:49:38.437 回答
1

如果您希望列名称标题显示为不同于表中定义的列名称,您只需使用该as "DisplayColumnName"列的子句:

select user_name, today as "12/12/2014" from some_table;

但是您需要以编程方式生成 SQL 语句才能使其正常工作。您使用的编码环境将决定如何动态创建选择语句。

于 2014-12-12T22:47:42.300 回答