Oracle SQL-将列分成多个列

时间:2018-09-12 14:55:50

标签: sql oracle

我正在使用Oracle SQL,但有一个我不知道如何解决的问题。 我的表格中有一列,其中包含一个字母(a-f)和一个数字,然后是另一个字母(a-f)和另一个数字等。

列示例:

a 30, d 800, b 233

有没有一种方法可以在select语句中将列分成多个列? 这样我就可以得到:

TEXTA  NUMBERA  TEXTB  NUMBERB   TEXTD   NUMBERD
  a     30       b      233       d       800

2 个答案:

答案 0 :(得分:2)

确定要像这样的列吗?

如果您这样做:

SELECT  REGEXP_SUBSTR (str, '[^, \s]+', 1, 1)    AS part_1
,       REGEXP_SUBSTR (str, '[^, \s]+', 1, 2)    AS part_2
,       REGEXP_SUBSTR (str, '[^, \s]+', 1, 3)    AS part_3
,       REGEXP_SUBSTR (str, '[^, \s]+', 1, 4)    AS part_4
, ...
FROM    table_x

str是您的列名,table_x是您的表

答案 1 :(得分:0)

  

使用示例数据尝试此代码,

WITH TEST_DATA AS
(SELECT 'a 30' COLUMN_A,'d 800' COLUMN_B,'b 233' COLUMN_C FROM DUAL)

SELECT SUBSTR(t.COLUMN_A, 1, INSTR(t.COLUMN_A, ' ')-1) AS TEXTA,
   SUBSTR(t.COLUMN_A, INSTR(t.COLUMN_A, ' ')+1) AS NUMBERA,
   SUBSTR(t.COLUMN_B, 1, INSTR(t.COLUMN_B, ' ')-1) AS TEXTD,
   SUBSTR(t.COLUMN_B, INSTR(t.COLUMN_B, ' ')+1) AS NUMBERD,
   SUBSTR(t.COLUMN_C, 1, INSTR(t.COLUMN_C, ' ')-1) AS TEXTB,
   SUBSTR(t.COLUMN_C, INSTR(t.COLUMN_C, ' ')+1) AS NUMBERB
FROM test_data T;

供您参考,http://www.sqlfiddle.com/#!4/e6cff/1