2 votes

Syntaxes étranges de SELECT dans la base de données

En fait, j'ai une grande table de base de données MySQL avec beaucoup de noms de villes, 90% d'entre eux sont des entrées valides, mais certains d'entre eux sont écrits d'une manière ... non valide.
Par exemple, la méthode valide est juste "CITYNAME", mais certains sont comme "(CITY NAME)(COUNTRY)" ou juste "(CITY NAME)", donc je veux juste SELECT toutes les entrées qui ne sont pas écrites de manière valide. Je ne sais pas si c'est assez précis n'hésitez pas à me demander des éléments précis. Et s'il vous plait aidez moi je n'ai aucune idée de comment construire ma requête SQL.

CREATE TABLE cities(
   name    VARCHAR(50) NOT NULL PRIMARY KEY
);
INSERT INTO cities(name) VALUES ('ORLANDO');
INSERT INTO cities(name) VALUES ('(CHARLOTTE)');
INSERT INTO cities(name) VALUES ('(PHOENIX)(USA)');
INSERT INTO cities(name) VALUES ('AUSTIN(USA)');
INSERT INTO cities(name) VALUES ('TENNESSEE NASHVILLE');

Voici donc quelques exemples des différents types d'entrées que je dois traiter.
Je ne sais pas comment décrire le résultat souhaité, ce serait juste une liste de syntaxes bizarres, avec ou sans les crochets.
L'objectif est de supprimer ces entrées bizarres, mais je dois le faire. SELECT avant de le faire. Et ce n'est pas non plus moi qui les supprimerai, c'est juste une question de volonté. SELECT .

0voto

Lilian Barraud Points 197

Pourquoi ne pas essayer quelque chose comme

Select * from cities where name like '(%';

Si le problème vient de la parenthèse, tout ce qui commence par une parenthèse sera sélectionné.

EDITAR:

Select * from cities where name like '%(%' or name like '%)%';

Il donne toutes les lignes qui contiennent un ( OR a )

EDIT2 : quelques explications

Le caractère "%" remplace n'importe quelle chaîne de caractères. Ainsi, si vous mettez comme '% chose aléatoire %', il cherchera tout ce qui ressemble à anystring_randomthing_anystring. J'espère avoir été clair

0voto

Yunnosch Points 11189

Solutions possibles avec résultats :

select * from cities where instr(name,')') or instr(name,'(');
(CHARLOTTE)
(PHOENIX)(USA)

Il recherche tout ce qui contient "(" ou ")" n'importe où.

0voto

Thibaut B. Points 1286

Vous utilisez MySql, vous pouvez donc le faire :

select *
from cities
where name not regexp '^[A-Z-]+$';

En not regexp '^[A-Z-]+$' désigne tous les noms de villes qui ne respectent pas le format "AAAA" o "AAAA-AAAAA" (où A représente une lettre majuscule) est considéré comme invalide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X