2016-04-11 11 views
0

Da ich fast ein Neuling in der Oracle-Datenbank bin, bitte ich um Ihre Hilfe.oracle database: teile eine Zeichenkette nach Zeichen

Ich brauche einen String in verschiedene Datensätze eine für jede caracter aufzuspalten:

Ich habe eine Abfrage mit einem VARCHAR Feld enthält, die ich brauche, in mehrere Zeichen aufzuspalten

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  ÿÿÿÿÿÿÿÿÿÿÿþþþþÿÿÿÿÿÿÿÿÿÿÿ 

Mein Ziel ist es, Split BINS Datensatz in mehrere Buchstaben obtaing ein Re-Cord wie dieses

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 
-------+-------+-------+---+-------- 
(...) 

Wenn ich versuchen, das Problem zu lösen, das Spiel mit „CONNECT BY“ Anweisung erhalte ich viele duplica te Aufzeichnungen und ich kann nicht verstehen, warum weder was auf meine Frage falsch:

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) 

Antwort

2

Sie mit so etwas wie dies versuchen:

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

Dies wird für jedes Zeichen des Ausgangs Zeichenfolge eine Zeile bauen, wo Die N-te Zeile enthält das N-te Zeichen, extrahiert durch substr.

Verwandte Themen