2016-04-11 26 views
0

作为Oracle数据库中的新手,我恳求您的帮助。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  ÿÿÿÿÿÿÿÿÿÿÿþþþþÿÿÿÿÿÿÿÿÿÿÿ 

我的目标是包含查询分分档记录成几个字母obtaing这样

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”语句我获得很多duplica TE记录,我不明白为什么没有什么是错我的查询:

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 */ 

这将构建一个排为开始的字符串,其中的每个字符:

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) 

回答

2

你可以用这样的尝试第N行包含第N个字符,由substr提取。