Bonjour,
Je suis en train de migrer des requêtes utilisée dans une BDD SQL Server vers PostgreSQL, et rencontre les difficultés suivantes (je débute sous Postgre) :
J'ai un champ "site_1", dans une table "tbl1" qui contient une chaine de caractères.
Le champ "site_1" est de type text, mais je rencontre le même problème avec un champ de type char, ou varchar.
La chaîne de caractère se trouvant dans "site_1" contient des lettres, un séparateur, et des chiffres, placés dans un ordre aléatoire.
Le séparateur peut être un '-' ou un '_'.
Lorsque le séparateur est un '-', les chiffres se trouvent avant le séparateur, et les lettres après.Il peut y avoir un '_' dans la chaîne à droite du '-'.
Lorsque le séparateur est un '_', les chiffres se trouvent après le séparateur, et les lettres avant.
Comme je n'ai besoin que des chiffres, j'ai fais 2 requêtes mise à jour du champs "site_1"
Les chiffres contenus dans "Site_1", serviront de clé pour lier la table tbl1, avec une autre table.
Je laisse volontairement le champs site_1 au format text car il est contenu dans une chaîne de caractère plus longue dans une colonne, de la seconde table.
Les requêtes suivantes fonctionnent (j'ai volontairement retiré le nom du schéma):
Lorsque je saisi la requête ci-dessous (sous pgadmin ou directement sous psql, dans une console UNIX) pour vérifier la longueur de la chaîne contenue dans "site_1" (qui doit être comprise entre 6 et 10), j'ai un message d'erreur qui dit que la fontion char_lenght(txt), n'existe pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 UPDATE tbl1 SET site_1 = TRIM(SUBSTRING(site_1,1,strpos(site_1,'-')-1)) WHERE TRIM(SUBSTRING(site_1,1,strpos(site_1,'-')-1))~ '^[0-9]*$' AND strpos(site_1,'-')>0 ; UPDATE tbl1 SET site_1 = TRIM(SUBSTRING(site_1,strpos(site_1,'_')+1,char_length(site_1)-strpos(site_1,'_'))) WHERE TRIM(SUBSTRING(site_1,strpos(site_1,'_')+1,char_length(site_1)-strpos(site_1,'_')))~ '^[0-9]*$' AND strpos(site_1,'_')>0 AND strpos(site_1,'-')=0;
Si je remplace char_lenght par len, j'ai exactement le même message d'erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT site_1, char_lenght(site_1)nb FROM tbl1 WHERE nb<6 or nb>10 ;
Comment afficher la longueur d'une chaîne de caractères dans une requête SQL, sous Postgre ?
Merci pour votre aide.
Partager