web-dev-qa-db-fra.com

Comment trouver des valeurs en majuscules dans SQL Server?

Comment puis-je trouver des valeurs de colonne en majuscule? Comme LastName = 'SMITH' au lieu de 'Smith'

Voici ce que j'essayais ...

SELECT *
  FROM MyTable
 WHERE FirstName = UPPER(FirstName)
25
daveomcd

Vous pouvez forcer le classement sensible à la casse;

select * from T
  where fld = upper(fld) collate SQL_Latin1_General_CP1_CS_AS
47
Alex K.

Essayer

 SELECT *
  FROM MyTable
 WHERE FirstName = UPPER(FirstName) COLLATE SQL_Latin1_General_CP1_CS_AS

Ce classement permet des comparaisons sensibles à la casse.

Si vous souhaitez modifier le classement de votre base de données afin de ne pas spécifier de classement respectant la casse dans vos requêtes, vous devez procéder comme suit ( à partir de MSDN ):

1) Assurez-vous de disposer de toutes les informations ou 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 l'utilitaire bcp. 

3) Supprimez toutes les bases de données utilisateur.

4) Reconstruisez la base de données master en spécifiant le nouveau classement 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éez toutes les bases de données et tous les objets qu’elles contiennent.

6) Importez toutes vos données.

7
Joe Ratzer

Vous devez utiliser un classement de serveur sensible à la casse, comme suit:

SELECT * 
FROM MyTable
WHERE FirstName = UPPER(FirstName) Collate SQL_Latin1_General_CP1_CS_AS
2
Anja

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

1
drdwilcox

Essayer

SELECT *
  FROM MyTable
 WHERE FirstName = LOWER(FirstName)
0
Despedo

J'ai créé une simple UDF pour cela:

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 de la clause WHERE.

Pour utiliser l'exemple OP:

SELECT *
FROM   MyTable
WHERE  dbo.fnIsStringAllUppercase(FirstName) = 1
0
isapir

Pourriez-vous essayer de l'utiliser comme clause Where?

WHERE PATINDEX(FirstName + '%',UPPER(FirstName)) = 1
0
Nonym

Regardez ici

On dirait que vous avez quelques options

  • jette la chaîne en VARBINARY (longueur)

  • utiliser COLLATE pour spécifier un classement sensible à la casse

  • calculer le BINARY_CHECKSUM () des chaînes à comparer

  • changez la propriété COLLATION de la colonne de la table

  • utiliser des colonnes calculées (calcul implicite de VARBINARY)

0
Richard Friend
0
hkravitz

Essaye ça

SELECT *
FROM MyTable
WHERE UPPER(FirstName) COLLATE Latin1_General_CS_AS = FirstName COLLATE Latin1_General_CS_AS
0
Sequenzia