我有一个表格,其中的列数以小时数命名,如下所示:
col00 NUMBER(5)
col01 NUMBER(5)
col02 NUMBER(5)
...
col23 NUMBER(5)
...我还有另一个按小时返回计数的查询。
我希望按小时恢复colXX值....然后我可以使用“解码”或“情况......”恢复,但我想知道是否存在以任何方式通过如下文本恢复列:
select "col"||hour from table;
在假设的上述例子中,如果小时为13,那么将被翻译为:
select col13 from table;
有办法做到这一点吗?
答案 0 :(得分:3)
您必须使用动态SQL:
EXECUTE IMMEDIATE 'SELECT col'|| hour || ' FROM TABLE;'
参考:
答案 1 :(得分:1)
...结算
select REGEXP_REPLACE(
REGEXP_REPLACE( DBMS_XMLGEN.GETXML('
SELECT col'|| to_char(sysdate,'HH24') || ' FROM TABLE
'),'.*<[/]?(\?xml .*>|ROW).*',''),' (<([^>]*)>([^<]*)</[^>]*>.*)','\2=\3') AS RES from dual
它不是那么简单但非常灵活,对我来说很有用。
答案 2 :(得分:0)
虽然它看起来有点......暴力......你可以在查询之间使用一堆UNION语句:
SELECT col00
FROM TABLE
WHERE to_char(SYSDATE, 'HH24') = '00'
UNION
SELECT col01
FROM TABLE
WHERE to_char(SYSDATE, 'HH24') = '01'
UNION
SELECT col02
FROM TABLE
WHERE to_char(SYSDATE, 'HH24') = '02'
(...and so on...)
UNION
SELECT col23
FROM TABLE
WHERE to_char(SYSDATE, 'HH24') = '23'