通过连接文本选择列作为 oracle 中的列名

发布于 2024-09-04 04:07:33 字数 404 浏览 8 评论 0原文

我有一个表,其中的列以一天中的小时数命名,如下所示:

col00 NUMBER(5)
col01 NUMBER(5)
col02 NUMBER(5)
...
col23 NUMBER(5)

...我还有另一个查询,它返回按小时计数。

我想按小时恢复 colXX 值...然后我可以使用“解码”或“情况...”来恢复,但我想知道是否存在任何方法可以通过如下文本恢复列:

select "col"||hour from table;

在假设的情况下上面的例子如果小时是 13 那么会被翻译成这样:

select col13 from table;

有什么办法可以做到这一点吗?

I have a table with columns named with the number of hour of day like this:

col00 NUMBER(5)
col01 NUMBER(5)
col02 NUMBER(5)
...
col23 NUMBER(5)

...and I have another query that returns a count by hour.

I want to recover the colXX value by hour.... then I can recover with "decode" or "case when..." but I want know if exists any way to recover the column by a text like this:

select "col"||hour from table;

in the hypothetical above example if hour is 13 then would be translated like:

select col13 from table;

there is any way to do this ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

雪落纷纷 2024-09-11 04:07:33

您必须使用动态 SQL:

EXECUTE IMMEDIATE 'SELECT col'|| hour || ' FROM TABLE;'

参考:

You have to use dynamic SQL:

EXECUTE IMMEDIATE 'SELECT col'|| hour || ' FROM TABLE;'

Reference:

巷子口的你 2024-09-11 04:07:33

关闭...

select REGEXP_REPLACE(
 REGEXP_REPLACE( DBMS_XMLGEN.GETXML('
 SELECT col'|| to_char(sysdate,'HH24') || ' FROM TABLE
'),'.*<[/]?(\?xml .*>|ROW).*',''),'  (<([^>]*)>([^<]*)</[^>]*>.*)','\2=\3') AS RES  from dual

它并不那么简单,但非常灵活,对我来说非常有用。

Closing...

select REGEXP_REPLACE(
 REGEXP_REPLACE( DBMS_XMLGEN.GETXML('
 SELECT col'|| to_char(sysdate,'HH24') || ' FROM TABLE
'),'.*<[/]?(\?xml .*>|ROW).*',''),'  (<([^>]*)>([^<]*)</[^>]*>.*)','\2=\3') AS RES  from dual

its not so simple but very flexible and works great for me.

孤单情人 2024-09-11 04:07:33

虽然它看起来有点......蛮力......你可以在查询之间使用一堆 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' 

While it looks a little...brute force...you could use a bunch of UNION statements between queries:

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' 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文