【发布时间】:2017-01-30 16:20:04
【问题描述】:
我在 oracle 表中有一个类似 ',,defoifcd,87765' 的字符串。意思是,前两个字符串是空的。所以我需要在 Oracle 中用逗号分隔字符串作为分隔符。我正在编写这个查询
SELECT
REGEXP_SUBSTR (TEST_STRING, '[^,]+', 1, 1) AS part_1,
REGEXP_SUBSTR (TEST_STRING, '[^,]+', 1, 2) AS part_2,
REGEXP_SUBSTR (TEST_STRING, '[^,]+', 1, 3) AS part_3,
REGEXP_SUBSTR (TEST_STRING, '[^,]+', 1, 4) AS part_4
FROM ABCD
;
这里 ABCD 是我的表,TEST_STRING 是我的库。
但结果返回像
PART_1, part_2, part_3, part_4
defoifcd,87765
但我想要这样的结果,
PART_1, part_2, part_3, part_4
defoifcd, 87765
意味着我需要 part_3 和 part_4 列中的 'defoifcd' 和 '87765' 值,因为前两个字符串是空的,但根据我的查询,它在 part_1 和 part_2 列中是 comimg。
【问题讨论】:
-
非常具体:不要检查接受的答案,而是检查 Gary 的答案:他正在解释和解决您当前的问题。
-
总是正好是四个部分吗?
-
并不总是四部分。
-
那么您将无法像这样排列列。除非您使用“动态 SQL”(这是一个不同的过程,并且通常不是最佳的),否则在查看数据之前必须提前知道输出列的数量。是否有预先已知的可用于查询的最大零件数?如果不是,您真的需要按列输出(而不是一列用于指定部件,另一列用于值)?
标签: oracle