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)
20
demandé sur NullUserException 2011-11-17 19:31:35

9 réponses

Vous pouvez forcer classement sensible à la casse;

select * from T
  where fld = upper(fld) collate SQL_Latin1_General_CP1_CS_AS
39
répondu Alex K. 2011-11-17 15:37:32

 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.

5
répondu Joe Ratzer 2011-11-17 15:39:40

la valeur par défaut, SQL comparaisons sont insensibles à la casse.

1
répondu drdwilcox 2011-11-17 15:36:43

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
1
répondu Anja 2015-08-10 18:02:14

pourriez-vous essayer d'utiliser ceci comme votre clause où?

WHERE PATINDEX(FirstName + '%',UPPER(FirstName)) = 1
0
répondu Nonym 2011-11-17 15:37:30

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)

0
répondu Richard Friend 2011-11-17 15:37:43

Essayez Ceci

SELECT *
FROM MyTable
WHERE UPPER(FirstName) COLLATE Latin1_General_CS_AS = FirstName COLLATE Latin1_General_CS_AS
0
répondu Sequenzia 2011-11-17 15:40:36

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
0
répondu isapir 2015-03-03 12:31:44