Database oracle数据库:按字符拆分字符串

Database oracle数据库:按字符拆分字符串,database,string,oracle,split,Database,String,Oracle,Split,作为Oracle数据库的新手,我恳请您的帮助 我需要将字符串拆分为不同的记录,每个字符对应一条记录: 我有一个查询,其中包含一个VARCHAR字段,我需要将其拆分为几个字符 select MAPS.MAP_ID, HARD_BIN_LINES.LINE, HARD_BIN_LINES.BINS from MAPS, HARD_BIN_LINES where MAPS.MAP_ID = 9595435 and MAPS.MAP_ID = HARD_BIN_LINES.MAP_ID

作为Oracle数据库的新手,我恳请您的帮助

我需要将字符串拆分为不同的记录,每个字符对应一条记录:

我有一个查询,其中包含一个VARCHAR字段,我需要将其拆分为几个字符

select
    MAPS.MAP_ID,
    HARD_BIN_LINES.LINE, HARD_BIN_LINES.BINS
from MAPS, HARD_BIN_LINES
where MAPS.MAP_ID = 9595435 and MAPS.MAP_ID = HARD_BIN_LINES.MAP_ID 
order by HARD_BIN_LINES.MAP_ID, HARD_BIN_LINES.LINE


MAP_ID  LINE    BINS
9595435 1       ÿÿÿÿÿÿÿÿÿÿÿþþþþÿÿÿÿÿÿÿÿÿÿÿ
9595435 2       ÿÿÿÿÿÿÿþþ       þþÿÿÿÿÿÿÿÿ
9595435 3       ÿÿÿÿÿþþ2           þÿÿÿÿÿÿ
9595435 4       ÿÿÿÿþ               þþÿÿÿÿ
9595435 5       ÿÿÿþ2                 þÿÿÿ
9595435 6       ÿÿþ                    þÿÿ
9595435 7       ÿÿþ2                   þÿÿ
9595435 8       ÿþþÿ                   þþÿ
9595435 9       ÿ2                      þÿ
9595435 10      þÿ                      þÿ
9595435 11      þ                        þ
9595435 12      ü                        þ
9595435 13      ü2                       þ
9595435 14      þ                        þ
9595435 15      þ                        ÿ
9595435 16      ÿþ             xx      þÿ
9595435 17      ÿþ                      þÿ
9595435 18      ÿÿþ                    þÿÿ
9595435 19      ÿÿþ                    þÿÿ
9595435 20      ÿÿÿþ                  þÿÿÿ
9595435 21      ÿÿÿÿþ               þþÿÿÿÿ
9595435 22      ÿÿÿÿÿþ      þ 2    þÿÿÿÿÿÿ
9595435 23      ÿÿÿÿÿÿÿþ þ  þþ    ÿÿÿÿÿÿÿÿ
9595435 24      ÿÿÿÿÿÿÿÿÿÿÿþþþþÿÿÿÿÿÿÿÿÿÿÿ
我的目标是将BINS记录拆分为几个字母,以获得这样的记录集

MAP_ID  LINE    LEVEL   CHR BINCODE
-------+-------+-------+---+--------
9595435 1       2       ÿ   255
9595435 1       3       ÿ   255
9595435 1       4       ÿ   255
9595435 1       5       ÿ   255
9595435 1       6       ÿ   255
9595435 1       7       ÿ   255
9595435 1       8       ÿ   255
9595435 1       9       ÿ   255
9595435 1       10      ÿ   255
9595435 1       11      ÿ   255
9595435 1       12      þ   254
9595435 1       13      þ   254
9595435 1       14      þ   254
9595435 1       15      þ   254
9595435 1       16      ÿ   255
9595435 1       17      ÿ   255
9595435 1       18      ÿ   255
9595435 1       19      ÿ   255
9595435 1       20      ÿ   255
9595435 1       21      ÿ   255
9595435 1       22      ÿ   255
9595435 1       23      ÿ   255
9595435 1       24      ÿ   255
9595435 1       25      ÿ   255
9595435 1       26      ÿ   255
-------+-------+-------+---+--------
9595435 2       2       ÿ   255
9595435 2       3       ÿ   255
9595435 2       4       ÿ   255
9595435 2       5       ÿ   255
9595435 2       6       ÿ   255
9595435 2       7       ÿ   255
9595435 2       8       þ   254
9595435 2       9       þ   254
9595435 2       10          1
9595435 2       11          1
9595435 2       12          10
9595435 2       13          1
9595435 2       14          13
9595435 2       15          17
9595435 2       16          1
9595435 2       17      þ   254
9595435 2       18      þ   254
9595435 2       19      ÿ   255
9595435 2       20      ÿ   255
9595435 2       21      ÿ   255
9595435 2       22      ÿ   255
9595435 2       23      ÿ   255
9595435 2       24      ÿ   255
9595435 2       25      ÿ   255
9595435 2       26      ÿ   25
-------+-------+-------+---+--------
(...)
如果我试图解决使用CONNECT BY语句的问题,我会获得许多重复记录,我无法理解为什么我的查询中也出现了问题:

with temp as (
    select
        MAPS.MAP_ID,
        HARD_BIN_LINES.LINE, HARD_BIN_LINES.BINS
    from MAPS, HARD_BIN_LINES
    where MAPS.MAP_ID = 9595435 and MAPS.MAP_ID = HARD_BIN_LINES.MAP_ID
    order by HARD_BIN_LINES.MAP_ID, HARD_BIN_LINES.LINE
)
select 
    MAP_ID, LINE, LEVEL,
    substr(BINS,level,1) as CHR, ASCII(substr(BINS,level,1)) as BINCODE
from temp
connect by level <= length(BINS)

您可以尝试以下方法:

select level, substr('Stefano', level, 1) /* a substring starting from level-th character, 1 character log */
from dual
connect by level <= length('Stefano') /* the same number of rows than the length of the string */

这将为起始字符串的每个字符生成一行,其中第n行包含由substr提取的第n个字符。

您可以尝试以下方法:

select level, substr('Stefano', level, 1) /* a substring starting from level-th character, 1 character log */
from dual
connect by level <= length('Stefano') /* the same number of rows than the length of the string */
这将为起始字符串的每个字符生成一行,其中第n行包含由substr提取的第n个字符