我正在使用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
答案 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;