|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
[Oracle] Eseguire uno split di un record
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. Ultima modifica di robertino_salemi : 11-05-2015 alle 10:21. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
Ho scritto questa soluzione:
Codice:
SELECT
REGEXP_SUBSTR ('Buongiorno||Che splendida giornata', '[^||]+', 1, 1) AS string1,
REGEXP_SUBSTR ('Buongiorno||Che splendida giornata', '[^||]+', 1, 2) AS string2
FROM DUAL;
Codice:
SELECT
REGEXP_SUBSTR ('Buongiorno||Che splendida giornata', '[^||]+', 1, 1) AS string1,
REGEXP_SUBSTR ('||Che splendida giornata', '[^||]+', 1, 2) AS string2
FROM DUAL;
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2005
Messaggi: 395
|
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 |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
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 |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jan 2005
Messaggi: 395
|
Quote:
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 |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
Maui78,
ho replicato tutti i possibili casi: Codice:
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
![]() Come poterlo risolvere? Grazie. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2005
Messaggi: 395
|
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... |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
|
Va bene così, la stringa viene generata da me, se dovesse mancare la seconda parte di essa, alla prima concateno comunque una ||.
Grazie! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:30.





















