Comment trouver des valeurs dans tous les caps de SQL Server?
Comment puis-je trouver les valeurs des colonnes qui sont dans tous les casquettes? Comme LastName = 'SMITH'
au lieu de 'Smith'
voici ce que j'essayais...
SELECT *
FROM MyTable
WHERE FirstName = UPPER(FirstName)
9 réponses
Vous pouvez forcer classement sensible à la casse;
select * from T
where fld = upper(fld) collate SQL_Latin1_General_CP1_CS_AS
SELECT *
FROM MyTable
WHERE FirstName = UPPER(FirstName) COLLATE SQL_Latin1_General_CP1_CS_AS
cette compilation permet des comparaisons sensibles à la casse.
si vous voulez changer la collation de votre base de données de sorte que vous n'avez pas besoin de spécifier une collation sensible à la casse dans vos requêtes, vous devez faire ce qui suit ( from MSDN):
1) Assurez-vous d'avoir toutes les informations ou les scripts nécessaires pour recréer vos bases de données utilisateur et tous les objets qu'elles contiennent.
2) exportez toutes vos données en utilisant un outil tel que utilitaire bcp.
3) Supprimer toutes les bases de données des utilisateurs.
4) reconstruire la base de données maître en spécifiant la nouvelle collation dans la propriété SQLCOLLATION de la commande setup. Par exemple:
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName
/SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ]
/SQLCOLLATION=CollationName
5) Créer toutes les bases de données et tous les objets en eux.
6) importez toutes vos données.
la valeur par défaut, SQL comparaisons sont insensibles à la casse.
Vous devez utiliser une compilation de serveur qui est sensible à la casse comme suit:
SELECT *
FROM MyTable
WHERE FirstName = UPPER(FirstName) Collate SQL_Latin1_General_CP1_CS_AS
pourriez-vous essayer d'utiliser ceci comme votre clause où?
WHERE PATINDEX(FirstName + '%',UPPER(FirstName)) = 1
regardez ici
Semble que vous avez un peu d'options
distribution de la chaîne d'VARBINARY(longueur)
utiliser COLLATE pour spécifier une collation sensible à la casse
calculer le BINARY_CHECKSUM () des chaînes pour comparer
changement de la colonne du tableau de CLASSEMENT de la propriété
utiliser les colonnes calculées (calcul implicite des VARBINARY)
Essayez Ceci
SELECT *
FROM MyTable
WHERE UPPER(FirstName) COLLATE Latin1_General_CS_AS = FirstName COLLATE Latin1_General_CS_AS
Vous pouvez trouver bon exemple dans recherche sensible à la casse: recherche d'une chaîne de caractères en minuscules ou en majuscules sur le serveur SQL
j'ai créé un simple UDF
pour:
create function dbo.fnIsStringAllUppercase(@input nvarchar(max)) returns bit
as
begin
if (ISNUMERIC(@input) = 0 AND RTRIM(LTRIM(@input)) > '' AND @input = UPPER(@input COLLATE Latin1_General_CS_AS))
return 1;
return 0;
end
Ensuite, vous pouvez facilement l'utiliser sur n'importe quelle colonne dans le WHERE
l'article.
pour utiliser L'exemple OP:
SELECT *
FROM MyTable
WHERE dbo.fnIsStringAllUppercase(FirstName) = 1