104 votes

Comment trouver les lignes dont la valeur contient une lettre minuscule ?

Je cherche une requête SQL qui me donne toutes les lignes où ColumnX contient une lettre minuscule (par exemple "1234aaaa5789"). Idem pour les majuscules.

131voto

geon Points 2187
SELECT * FROM my_table 
WHERE UPPER(some_field) != some_field

Cela devrait fonctionner avec des caractères amusants comme åäöøüæï. Vous devrez peut-être utiliser une collation utf-8 spécifique à votre langue pour le tableau.

36 votes

Cela ne fonctionne pas dans une base de données insensible à la casse, il faut ajouter COLLATE Latin1_General_CS_AS de Devraj Gadhavi réponse

1 votes

Dans MySQL 5.6, Latin1_General_CS_AS a provoqué une erreur. COLLATE latin1_general_cs a fonctionné cependant.

0 votes

@kouton édité ma réponse pour plus de détails sur le problème que vous avez rencontré.

55voto

Devraj Gadhavi Points 1104
SELECT * FROM my_table WHERE my_column = 'my string'
COLLATE Latin1_General_CS_AS

Cela rendrait la recherche sensible à la casse.


EDIT

Comme indiqué dans kouton 's commentez ici y tormuto 's commentez ici quiconque rencontre un problème avec la collation ci-dessous

COLLATE Latin1_General_CS_AS

doit d'abord vérifier le collation par défaut pour leur serveur SQL, leur base de données respective et la colonne en question ; et transmettre la collation par défaut avec l'expression de la requête. La liste des collations peut être trouvée aquí .

43voto

NBS Points 321
SELECT * FROM Yourtable 
WHERE UPPER([column_NAME]) COLLATE Latin1_General_CS_AS !=[Column_NAME]

0 votes

Cool, cela a fonctionné pour moi sur SQL Server 2016

27voto

martincarlin87 Points 2881

Voici comment j'ai procédé pour la table codée utf8 et la colonne utf8_unicode_ci, ce qui ne semble pas avoir été posté exactement :

SELECT *
FROM table
WHERE UPPER(column) != BINARY(column)

9 votes

C'est la réponse parfaite. Plus besoin de se battre contre la collation

2 votes

Ne fonctionne pas sur SQL Server. J'ai essayé avec not equal to avec <>

0 votes

Je ne suis pas sûr que cela fonctionne sur SQL Server, cela n'a été testé que sur MySQL.

15voto

El David Points 478

Pour rechercher toutes les lignes en minuscules

SELECT *
FROM Test
WHERE col1 
LIKE '%[abcdefghijklmnopqrstuvwxyz]%'
collate Latin1_General_CS_AS

Merci Manesh Joseph

0 votes

Cela a résolu mon problème après avoir changé la chaîne de comparaison en majuscules.

0 votes

C'est très intéressant. J'avais essayé avec '%[a-z]%', ce qui ne fonctionne pas. J'ai confirmé que l'épellation de chaque lettre fonctionne.

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