SQL 分隔符并创建新行
问题出现的原因是需要将一个包含特定分隔符的字段拆分为多个字段,并创建新的行来存储这些字段。在这个例子中,分隔符是"!"。
解决方法是使用Oracle中的SUBSTR函数和INSTR函数来实现。首先,将原始字段包装在两个"!"字符之间,这样可以确保第一个字段和最后一个字段也能被正确拆分。然后,使用INSTR函数来找到每个分隔符的位置,再使用SUBSTR函数来提取每个字段的值。最后,使用CONNECT BY子句和LEVEL关键字生成一个数字序列,用于控制拆分的次数。通过连接这个数字序列的结果集和原始表,可以将每个字段拆分到不同的行中。
以下是具体的SQL代码:
select COLUMN_A, subSTR(COLUMN_B, inSTR(COLUMN_B, '!', 1, lvl) + 1, inSTR(COLUMN_B, '!', 1, lvl + 1) - inSTR(COLUMN_B, '!', 1, lvl) - 1) name from ( select '!' || COLUMN_B || '!' as COLUMN_B, COLUMN_A from table ), ( select level as lvl from dual connect by level <= 100 ) where lvl <= length(COLUMN_B) - length(replace(COLUMN_B, '!')) - 1 order by COLUMN_A, COLUMN_B
这段代码将返回拆分后的字段和原始字段的值。其中,COLUMN_A是原始字段的另一个字段,name是拆分后的字段的名称。使用ORDER BY子句可以按照COLUMN_A和COLUMN_B的值进行排序。
需要注意的是,这段代码只适用于Oracle数据库的11g和12c版本。对于其他版本的Oracle或其他数据库,可能需要使用不同的函数或语法来实现类似的功能。