|
|
|
![]() |
|
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 09: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: 03:50.