如何从('1','2','3')创建结果集?

时间:2009-07-24 13:02:17

标签: sql oracle

我有一个问题,我怎样才能使结果集只制作值列表。例如,我有这样的值:('1','2','3') 我想创建一个返回这样的表的SQL:

1
2
3

感谢。

[编辑]

抱歉错误的问题。 实际上列表不包含整数,但它包含字符串。 我目前需要('aa','bb,'cc')。

[/编辑]

4 个答案:

答案 0 :(得分:3)

如果你想编写一个SQL语句,它将采用逗号分隔列表并生成任意数量的实际行,唯一真正的方法是使用一个表函数,它调用一个PL / SQL函数来分割输入字符串并将元素作为单独的行返回。

Check out this link用于表函数的介绍。

或者,如果您可以在客户端中以编程方式构造SQL语句,则可以执行以下操作:

SELECT 'aa' FROM DUAL
UNION
SELECT 'bb' FROM DUAL
UNION
SELECT 'cc' FROM DUAL

答案 1 :(得分:1)

最简单的方法是滥用保证有足够行数的表格。

-- for Oracle
select rownum from tab where rownum < 4;

如果无法做到这一点,请查看Oracle Row Generator Techniques

我喜欢这个(需要10克):

select integer_value
from   dual
where  1=2
model
  dimension by ( 0 as key )
  measures     ( 0 as integer_value )
  rules upsert ( integer_value[ for key from 1 to 10 increment 1 ] = cv(key) )
;

答案 2 :(得分:1)

我在各种数据库系统(不仅仅是SQL数据库)中使用过的一个技巧实际上是拥有一个只包含前100或1000个整数的表。这样的表很容易以编程方式创建,然后您的查询变为:

SELECT value FROM numbers WHERE value < 4 ORDER BY value

您可以将该表用于许多类似用途。

答案 3 :(得分:1)

我发现最好的方法是使用XML。


SELECT items.extract('/l/text()').getStringVal() item
FROM TABLE(xmlSequence(
        EXTRACT(XMLType(''||
        REPLACE('aa,bb,cc',',','')||'')
          ,'/all/l'))) items;

希望我能得到信任,但唉:http://pbarut.blogspot.com/2006/10/binding-list-variable.html

基本上它的作用是将列表转换为xmldocument,然后将其解析出来。