我可以拥有像
这样的东西吗?SELECT (1, 2, 4542, 342) FROM DUAL;
并且这样得到它?
| 1 |
| 2 |
| 4542 |
| 342 |
答案 0 :(得分:6)
如果(1, 2, 4542, 342)
是一个字符串,你可以这样做:
with cte as (
SELECT '1, 2, 4542, 342' as str
FROM DUAL
)
select regexp_substr(str,'[^,]+',1,level)
from cte
connect by level <= regexp_count(str, ',')+1
/
答案 1 :(得分:5)
没有。 dual
只有一行,但您可以使用union all
:
SELECT 1 FROM DUAL UNION ALL
SELECT 2 FROM DUAL UNION ALL
SELECT 4542 FROM DUAL UNION ALL
SELECT 342 FROM DUAL;
这只是生成表格的一种方式&#34;即时“#34;在Oracle中。
答案 2 :(得分:5)
select decode(level,3,4542,4,342,level) lvl from dual connect by level <= 4
答案 3 :(得分:5)
而不是DUAL
,将TABLE
运算符与预构建的集合结合起来以返回多行。此解决方案具有较小的语法,可避免类型转换,并避免可能较慢的递归查询。但是理解其他解决方案也很好,它们在不同的环境中都很有用。
select * from table(sys.odcinumberlist(1, 2, 4542, 342));
答案 4 :(得分:0)
双表基本上是一个虚表,它有一行一列,存在于sys schema
中 SELECT (1,2, 4542, 342) FROM DUAL;
这会给您一个错误,因为您在此表中传递了多个列。 1,2,4542,342作为单独的列处理。请尝试以下查询: -
SELECT ('1,2, 4542, 342') FROM DUAL;
&#39; 1,2,445,442&#39;将被视为单个字符串。
对于您所需的输出,我们可以使用 UNION ALL 运算符。请尝试以下查询: -
SELECT 1 FROM DUAL
UNION ALL
SELECT 2 FROM DUAL
UNION ALL
SELECT 4542 FROM DUAL
UNION ALL
SELECT 342 FROM DUAL;
答案 5 :(得分:0)
双表可以具有多行和多列,例如=>
SQL> select 1, 'john' from dual
2 union
3 select 2, 'smith' from dual;
1 'JOHN
---------- -----
1 john
2 smith