将varchar拆分为Oracle中的单独列

rye*_*3ad 21 sql oracle

我有点不好意思:我被要求从数据库中的特定字符串开始接收注释,并将结果分成不同的列.

例如 - 如果返回的值是这样的:

COLUMN_ONE
--------------------
'D7ERROR username'
Run Code Online (Sandbox Code Playgroud)

回报需要是:

COL_ONE    COL_TWO
--------------------
D7ERROR   username   
Run Code Online (Sandbox Code Playgroud)

一旦结构集的结构只是为了将字符串拆分为两个,是否可以定义列?

OMG*_*ies 46

取决于数据的一致性 - 假设单个空格是您希望在第一列和第二列中显示的内容之间的分隔符:

SELECT SUBSTR(t.column_one, 1, INSTR(t.column_one, ' ')-1) AS col_one,
       SUBSTR(t.column_one, INSTR(t.column_one, ' ')+1) AS col_two
  FROM YOUR_TABLE t
Run Code Online (Sandbox Code Playgroud)

Oracle 10g +具有正则表达式支持,根据您需要解决的情况提供更大的灵活性.它还有一个正则表达式子串方法......

参考:

  • 次要细节......这将包括空格作为输出中第一列的一部分.您可能希望它是SUBSTR(t.column_one,1,INSTR(t.column_one,'') - 1) (2认同)

tal*_*lek 36

使用REGEXP_SUBSTR就像:

SELECT REGEXP_SUBSTR(t.column_one, '[^ ]+', 1, 1) col_one,
       REGEXP_SUBSTR(t.column_one, '[^ ]+', 1, 2) col_two
FROM YOUR_TABLE t;
Run Code Online (Sandbox Code Playgroud)

  • 我知道我正在重现一个老问题,@CharlesHenry - 你尝试过吗?只需将空格替换为 ~~ `select regexp_substr('123~~45,6,7', '[^~~]+', 1, 1), regexp_substr('123~~45,6,7', ' [^~~]+', 1, 2) 来自对偶` (2认同)