View Full Version : [Oracle] Eseguire uno split di un record
robertino_salemi
11-05-2015, 09:10
Buongiorno a tutti,
ho un colonna 'note' il cui contenuto può essere del tipo:
"Buongiorno a tutti||Che splendida giornata"
Vorrei eseguire una query che mi permetta di ottenere:
- string1 = "Buongiorno a tutti"
- string2 = "che splendida giornata"
ovviamente se uno dei due record è vuoto torno una stringa vuota...
Suggerimenti?
Grazie.
robertino_salemi
11-05-2015, 10:00
Ho scritto questa soluzione:
SELECT
REGEXP_SUBSTR ('Buongiorno||Che splendida giornata', '[^||]+', 1, 1) AS string1,
REGEXP_SUBSTR ('Buongiorno||Che splendida giornata', '[^||]+', 1, 2) AS string2
FROM DUAL;
ma se si verifica che la prima parte è vuota, cioè:
SELECT
REGEXP_SUBSTR ('Buongiorno||Che splendida giornata', '[^||]+', 1, 1) AS string1,
REGEXP_SUBSTR ('||Che splendida giornata', '[^||]+', 1, 2) AS string2
FROM DUAL;
la query non funziona più! :(
Non so se ho capito bene quello che vuoi fare.....puoi provare se questa ti funziona ? Io ho lavorato sul campo, non sulla stringa ed ho inserito il doppio pipe come delimitatore.
SELECT NVL(SUBSTR(col1,1
,INSTR(col1,'||')-1
),col1),
SUBSTR(col1
,INSTR(col1,'||',-1)+2
)
FROM table
robertino_salemi
11-05-2015, 13:58
Cia Maui78,
restituisce il mio stesso problema, se manca la prima parte del testo "Buongiorno" la seconda parte "Che splendida giornata" viene visualizzata nella prima colonna string1
Cia Maui78,
restituisce il mio stesso problema, se manca la prima parte del testo "Buongiorno" la seconda parte "Che splendida giornata" viene visualizzata nella prima colonna string1
:doh:
Ti ho allegato la prima prova che ho fatto....
Questa dovrebbe andar bene...
SELECT SUBSTR(col1,1
,INSTR(col1,'||')-1
),
SUBSTR(col1
,INSTR(col1,'||',-1)+2
)
FROM table
robertino_salemi
11-05-2015, 15:22
Maui78,
ho replicato tutti i possibili casi:
SELECT
/*CASO CORRETTO*/
SUBSTR('Buongiorno||Che splendida giornata',1,INSTR('Buongiorno||Che splendida giornata','||')-1) AS S1,
SUBSTR('Buongiorno||Che splendida giornata',INSTR('Buongiorno||Che splendida giornata','||',-1)+2) AS S2,
/*PRIMO BLOCCO SENZA || */
SUBSTR('Buongiorno',1,INSTR('Buongiorno','||')-1) AS S3,
SUBSTR('Buongiorno',INSTR('Buongiorno','||',-1)+2) AS S4,
/*SECONDO BLOCCO SENZA IL PRIMO*/
SUBSTR('||Che splendida giornata',1,INSTR('||Che splendida giornata','||')-1) AS S5,
SUBSTR('||Che splendida giornata',INSTR('||Che splendida giornata','||',-1)+2) AS S6,
/*PRIMO BLOCCO CON LA PIPE */
SUBSTR('Buongiorno||',1,INSTR('Buongiorno||','||')-1) AS S7,
SUBSTR('Buongiorno||',INSTR('Buongiorno||','||',-1)+2) AS S8
FROM DUAL
l'anomalia si verifica nella colonna S3 e S4
https://dl.dropboxusercontent.com/u/50056863/oracle_split_pipe.jpg
Come poterlo risolvere?
Grazie.
Avevo capito il doppio pipe fosse sempre presente, invece non è così ?!
Nel campo S4 non c'è....
Se così fosse bisogna inserire una if all'interno della query, magari usando la decode...
robertino_salemi
12-05-2015, 08:58
Va bene così, la stringa viene generata da me, se dovesse mancare la seconda parte di essa, alla prima concateno comunque una ||.
Grazie! :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.