oracle-sqldeveloper - 选择带有变量的列名
问题描述
我有一个包含 10 列的表,名称为:cost201907、cost201906、cost201905 ......
我想在今天的月份和年份中放入一个变量:a = 201907
define a = to_char(SYSDATE, 'yyyy')|| to_char(SYSDATE, 'mm') from dual;
SELECT &a;
output: a = 201907
我的目标是使用此变量选择一列。
每个月运行一个脚本,在变量中给我今天的日期,
并在使用它使用 select 语句选择最近的列之后,例如:
Select 'cost'||a from Table1.
可能我会使用 PL/SQL 但仍然找不到方法。请帮我。
解决方案
您可以使用替换变量,但您需要稍微不同地填充它,正确形成列名。
在你使用的那一刻define
,它给出a
了你设置的整个字符串的值;然后您的选择将整个字符串作为替换,您可以通过以下方式看到set verify on
:
SELECT &a;
old:SELECT &a
new:SELECT to_char(SYSDATE, 'yyyy')|| to_char(SYSDATE, 'mm') from dual
TO_CHA
------
201907
然后当你这样做
Select 'cost'a from Table1;
您正在选择文本文字“成本”,并为该列表达式赋予别名a
- 与您的变量完全无关;所以你会看到如下输出:
A
----
cost
cost
cost
...
表中的每一行都有一个输出行。
代替您的定义,使用该column ... new_value ...
选项使虚拟查询的结果可用作以后的替换变量:
column a new_value a;
select to_char(sysdate, 'YYYYMM') as a from dual;
A
------
201907
select cost&a from table1;
old:select cost&a from table1
new:select cost201907 from table1
COST201907
----------
42
...
您可以将虚拟查询包装在一个set termout off
和... on
对中,尽管您似乎仍然需要从文件运行脚本@
以使其正常生效。set verify off
一旦您对它感到满意,您就可以隐藏旧/新显示。
推荐阅读
- c# - C# HttpClient 连接中止
- java - 使用 BLE 从智能手表接收加速度计和陀螺仪信号
- azure - 无法将经过训练的模型部署到现有 AKS 计算目标
- java - 使用带角度的弹簧启动时出现 CORS 策略错误
- cakephp - CakePHP 3如何使用REST以正确的方式保存相关关联1:N?
- javascript - 当 pageYOffSet = 0 时隐藏导航栏
- android - 如何从反应原生应用程序创建库
- python - Python Pyodbc 二进制列返回 \xda\x08\xcd\x08\xba\x08 而不是数字
- sql - 从 SQL Server 2008 中的部分构造日期
- python - 如何在詹金斯管道的docker容器中运行python脚本