SQL - 将单列分成多列

标签 sql oracle select split

我有以下 SQL 问题:

如何使用 SELECT 命令将一列(里面的文本)分成两个带有拆分文本的单独列?

我需要使用空格字符分隔文本数据。
我知道最好举个例子来简化。所以:

SELECT COLUMN_A FROM TABLE1

输出:
COLUMN_A
-----------
LORE IPSUM

所需的输出:
COLUMN_A   COLUMN_B
---------  ----------
LORE       IPSUM

谢谢大家的帮助。

最佳答案

取决于数据的一致性 - 假设单个空格是您想要出现在第一列与第二列中的分隔符:

WITH TEST_DATA AS
  (SELECT 'LOREM IPSUM' COLUMN_A FROM DUAL)

SELECT SUBSTR(t.COLUMN_A, 1, INSTR(t.COLUMN_A, ' ')-1) AS COLUMN_A,
       SUBSTR(t.COLUMN_A, INSTR(t.COLUMN_A, ' ')+1) AS COLUMN_B
FROM test_data T;

您还可以在 REGEX 中使用以下查询:
WITH TEST_DATA AS
   (SELECT 'LOREM IPSUM' COLUMN_A FROM DUAL)

SELECT REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 1, 1) COLUMN_A,
       REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 1, 2) COLUMN_B
FROM test_data T;

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

编辑:
3 字拆分:
WITH TEST_DATA AS
  (SELECT 'LOREM IPSUM DIMSUM' COLUMN_A FROM DUAL)

 SELECT REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 1, 1) COLUMN_A,
     REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 1, 2) COLUMN_B,
     REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 2, 3) COLUMN_C
 FROM test_data T;

引用:
  • SUBSTR
  • INSTR
  • 关于SQL - 将单列分成多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24033336/

    相关文章:

    mysql - 如何合并 SQL SELECT 字段

    sql - 在单列上不同,但根据未选择的条件从同一个表返回一行

    oracle - 如何在 Oracle SQL Developer 中查看数据库的模式树列表?

    sql - 无法使用 SQL/Bigquery JOIN 获取两条记录

    oracle - Tomcat 无法创建 TCPS Oracle JDBC 连接

    oracle - 如何在 Oracle 11g 系统上找到可用的目录对象?

    javascript - 如何防止Angular1.0选择(下拉)多余的空格?

    css - Android 下拉(选择)CSS

    android - 在 Android SQLite 中处理日期的最佳方式

    mysql - 如何在 MySQL 中执行动态 UNION 查询?