Bonjour
Je cherche a visualiser dans une table les enregistrements et tous les champs qui continent des caracteres spéciaux .
Comment puis je faire cela avec postgres ?
Merci d'avance
Phil
Bonjour
Je cherche a visualiser dans une table les enregistrements et tous les champs qui continent des caracteres spéciaux .
Comment puis je faire cela avec postgres ?
Merci d'avance
Phil
Utilisez la fonction TRANSLATE avec un unique caractères de remplacement non imprimable par exemple le CHAR(7) qui est "BELL" puis supprimer ce caractère et retrouvez les colonnes dont les valeurs ont des longueurs différentes.
Exemple :
A +
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM MaTable WHERE LENGTH(MaColonne) <> LENGTH(REPLACE(TRANSLATE(MaColonne, 'àäâéèêë...', CHAR(7) || CHAR(7) || CHAR(7) || ...CHAR(7)), CHAR(7), ''))
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
mon idee actuel que je dois tester est celle ci
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 CREATE OR REPLACE FUNCTION f_search_specchars( haystack_tables name[] default '{}', haystack_schema name[] default '{}' ) RETURNS table(schemaname text, tablename text, columnname text, rowctid text) AS $$ begin FOR schemaname,tablename,columnname IN SELECT c.table_schema,c.table_name,c.column_name FROM information_schema.columns c JOIN information_schema.tables t ON (t.table_name=c.table_name AND t.table_schema=c.table_schema) JOIN information_schema.table_privileges p ON (t.table_name=p.table_name AND t.table_schema=p.table_schema AND p.privilege_type='SELECT') JOIN information_schema.schemata s ON (s.schema_name=t.table_schema) WHERE (c.table_name=ANY(haystack_tables) OR haystack_tables='{}') AND (c.table_schema=ANY(haystack_schema) OR haystack_schema='{}') AND t.table_type='BASE TABLE' LOOP FOR rowctid IN EXECUTE format('SELECT ctid FROM %I.%I WHERE %I is not null and cast(%I as text) !~* '[A-Za-z0-9_-% ]', schemaname, tablename, columnname ) LOOP -- uncomment next line to get some progress report -- RAISE NOTICE 'hit in %.%', schemaname, tablename; RETURN NEXT; END LOOP; END LOOP; END; $$ language plpgsql;
Bonjour,
Attention à l'enchainement des apostrophes !
La coloration du code montre qu'il y a un problème à partir de la ligne 24.
Il faudrait écrire :
PS : je n'ai pas été plus loin dans l'étude du code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part EXECUTE format('SELECT ctid FROM %I.%I WHERE %I is not null and cast(%I as text) !~* ''[A-Za-z0-9_-% ]''',
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.
oui
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
20
21
22
23
24
25
26
27
28
29
30 begin FOR schemaname,tablename,columnname IN SELECT c.table_schema,c.table_name,c.column_name FROM information_schema.columns c JOIN information_schema.tables t ON (t.table_name=c.table_name AND t.table_schema=c.table_schema) JOIN information_schema.table_privileges p ON (t.table_name=p.table_name AND t.table_schema=p.table_schema AND p.privilege_type='SELECT') JOIN information_schema.schemata s ON (s.schema_name=t.table_schema) WHERE (c.table_name=ANY(haystack_tables) OR haystack_tables='{}') AND (c.table_schema=ANY(haystack_schema) OR haystack_schema='{}') AND t.table_type='BASE TABLE' LOOP FOR rowctid IN EXECUTE format('SELECT ctid FROM %I.%I WHERE %I IS NOT NULL AND CAST(%I as text) !~* ''[A-Za-z0-9_\- ]''', schemaname, tablename, columnname, columnname ) LOOP -- uncomment next line to get some progress report -- RAISE NOTICE 'hit in %.%', schemaname, tablename; RETURN NEXT; END LOOP; END LOOP; END;
j'ai encore trop de faux positif avec les null et surtout les zones ne contenant que des espaces ou cela pose soucis si ce ne sont pas des String
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager