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
/
双表基本上是一个虚拟表,它有一行和一列,存在于sys模式中 SELECT (1,2, 4542, 342) FROM DUAL; 这将给予你一个错误,因为你已经通过了一个以上的列在这个表中。1,2,4542,342被视为单独的列。尝试下面的查询:- SELECT ('1,2, 4542, 342') FROM DUAL; '1,2,4542,342'将被视为单个字符串。 对于您需要的输出,我们可以使用UNION ALL运算符。尝试以下查询:- SELECT 1 FROM DUAL UNION ALL SELECT 2 FROM DUAL UNION ALL SELECT 4542 FROM DUAL UNION ALL SELECT 342 FROM DUAL;
7条答案
按热度按时间kq4fsx7k1#
不使用
DUAL
,而是从预构建的集合中选择以返回多行。此解决方案具有较小的语法,避免了类型转换,并避免了可能缓慢的递归查询。但也最好了解其他解决方案,因为它们在不同的上下文中都很有用。请注意,
TABLE()
运算符在Oracle的现代版本中是可选的,仅在旧版本中是必需的。qq24tv8q2#
如果
(1, 2, 4542, 342)
是一个字符串,你可以这样做:u7up0aaq3#
dual
只有一行,但你可以使用union all
:这只是在Oracle中“动态”生成表的一种方法。
oymdgrw74#
h7wcgrx35#
双表基本上是一个虚拟表,它有一行和一列,存在于sys模式中
SELECT (1,2, 4542, 342) FROM DUAL;
这将给予你一个错误,因为你已经通过了一个以上的列在这个表中。1,2,4542,342被视为单独的列。尝试下面的查询:-
SELECT ('1,2, 4542, 342') FROM DUAL;
'1,2,4542,342'将被视为单个字符串。
对于您需要的输出,我们可以使用UNION ALL运算符。尝试以下查询:-
SELECT 1 FROM DUAL UNION ALL SELECT 2 FROM DUAL UNION ALL SELECT 4542 FROM DUAL UNION ALL SELECT 342 FROM DUAL;
xienkqul6#
双表可以有多行多列,例如=〉
gcmastyq7#
alias的其他示例:
SELECT column_value as xvalue FROM sys.odcinumberlist(1,2,4542,342);