#1 Wed 15 February 2023 17:50
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 994
SQL : Convertir chaine en Array avec SQLite
Salut à tous,
J'ai des données dans une colonne, qui sont une concaténation de valeurs séparées par des virgules.
Je souhaite créer autant de lignes que de valeur dans cette colonne.
J'y arrive bien avec PostGreSQL avec une requête de ce type :
Code:
trim(unnest(string_to_array(monchamp, ',')))
Mais j'aimerais bien le faire directement avec les couches virtuelles de QGis, donc avec SQLite, sans passer par PostGreSQL.
J'ai testé* avec split(monchamp), mais ça n'a pas marché.
Merci pour vos conseils
* ça m'avait été proposé par ChatGPT, à "qui" j'avais posé la question et qui m'avait répondu "Notez que la fonction "split" est disponible uniquement pour les versions de SQLite 3.31.0"
Pourtant, un select sqlite_version(); depuis les couches virtuelles m'indique que je suis en "3.39.4", donc théoriquement OK pour "split()".
Sylvain M.
Hors ligne
#2 Wed 15 February 2023 20:36
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1542
Re: SQL : Convertir chaine en Array avec SQLite
Bonsoir,
Possible avec une cte recursive apparemment:
https://stackoverflow.com/questions/346 … ure-sqlite
Nicolas
Hors ligne
#3 Thu 16 February 2023 12:06
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 994
Re: SQL : Convertir chaine en Array avec SQLite
Merci Nicolas
Malheureusement, je ne maitrise pas encore les requêtes récursives ... (et je n'ai pas le temps de m'y pencher actuellement, même si je mesure l'intérêt !)
Du coup, j'ai plus vite fait de passer ma table sous PostGreSQL pour gérer cela avec string_to_array()
Mais je suis surpris que cette fonction split() ne marche pas, alors que je vois des références à son sujet
D'autant que je n'ai pas de réponse du type "no such function: split", mais un résultat "NULL" pour chaque entité... ?
Sylvain M.
Hors ligne