bonjour,
je travaille avec postgresql 11
J'ai du texte et je veux extraire une sous-chaîne de ce texte :
"|a john dumas .|d 1941|e united states|=^A22306"
le résultat correct doit être john dumas .1941
"|a john dumas .|e united states|=^A22306"
le résultat correct doit être john dumas .
"|a john dumas .|=^A22306 |e united states |d 1941 |f admin "
le résultat correct doit être john dumas .1941
"|a john dumas .|f admin |d 1941 |=^A22306 |e united states"
le résultat correct doit être john dumas .1941
"|a john dumas .|f admin |d 1941 "
le résultat correct doit être john dumas .1941
le résultat correct doit être john dumas .
"john dumas .|e united states |d 1941 "
le résultat correct doit être john dumas .1941
le résultat correct doit être john dumas .
si le texte contient |a alors lisez depuis |a jusqu'à trouver le premier caractère | et si le texte contient |d alors lisez à partir de |d jusqu'à trouver le premier caractère | après |d comme exemple 1 et 3 et 4
si le texte contient |a alors lisez depuis |a jusqu'à trouver le premier caractère | et si le texte contient |d et ne contient aucun caractère | après |d donc lire de |d jusqu'à la fin du texte comme exemple 5
si le texte contient |a et si le texte ne contient aucun caractère | après |a donc lire de |a jusqu'à la fin du texte comme exemple 6
si le texte contient |a et ne contient aucun caractère |d, alors lisez à partir de |a jusqu'à ce que vous trouviez le premier caractère | après |a comme exemple 2
si le texte ne contient pas |a lit le texte depuis le début jusqu'à trouver le premier caractère | et si le texte contient |d et ne contient aucun caractère | après |d donc lire de |d jusqu'à la fin du texte comme exemple 7
si le texte ne contient pas |a et ne contient aucun caractère | donc lisez tout le texte depuis le début comme l'exemple 8
l'objectif principal de tous les exemples est de lire à partir de |a et de |d et si le texte ne contient pas |a, alors lisez depuis le début du texte.
Je veux avoir une seule requête select qui peut traiter tous ces exemples.
J'essaie avec ce code, mais le problème est que ce code ne donne le résultat correct que pour le premier exemple
1 2
|
select replace(substring('|a john dumas .|d 1941|e united states|=^A22306' from '\|a(.+)\|e'), '|d', '') |
le résultat est correct " john dumas . 1941"
quelqu'un peut-il m'aider à résoudre ce problème
merci d'avance
Partager