2011-11-17 17 views
18

¿Cómo puedo encontrar los valores de columna que están en mayúsculas? Al igual que en lugar de LastName = 'SMITH''Smith'¿Cómo encontrar valores en mayúsculas en SQL Server?

Esto es lo que estaba tratando ...

SELECT * 
    FROM MyTable 
WHERE FirstName = UPPER(FirstName) 
+1

que debería funcionar. ¿Qué resultado obtuviste? – Polynomial

+0

@Polynomial, estoy obteniendo los mismos resultados que si ejecutara "WHERE FirstName = FirstName" ... tal vez la codificación debe ser diferente (si eso tiene sentido ... idk de lo que estoy hablando exactamente) – daveomcd

Respuesta

38

Puede forzar la intercalación sensible a mayúsculas y minúsculas;

select * from T 
    where fld = upper(fld) collate SQL_Latin1_General_CP1_CS_AS 
1

Sé por defecto, las comparaciones de SQL son sensibles a mayúsculas.

0

¿Podría intentar usar esto como su cláusula where?

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

Tener una mirada here

Parece que tiene algunas opciones

  • tire la cadena a VARBINARY (longitud)

  • uso Intercalar para especificar una intercalación mayúscula

  • calcular th e BINARY_CHECKSUM() de las cadenas de comparar

  • cambio de propiedad de intercalación de columna de la tabla

  • uso calculado columnas (cálculo implícito de VARBINARY)

1

Es necesario utilizar una intercalación del servidor que es entre mayúsculas y minúsculas, así:

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

Trate

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

Esta intercalación permite realizar comparaciones entre mayúsculas y minúsculas.

Si desea cambiar la intercalación de la base de datos por lo que no es necesario specifiy una colación entre mayúsculas y minúsculas en las consultas que tiene que hacer lo siguiente (from MSDN):

1) Asegúrate de que tienes toda la información o scripts necesarios para volver a crear sus bases de datos de usuario y todos los objetos en ellas.

2) Exporte todos sus datos usando una herramienta como la utilidad bcp.

3) Elimine todas las bases de datos de usuario.

4) Reconstruya la base de datos maestra especificando la nueva intercalación en la propiedad SQLCOLLATION del comando de instalación. Por ejemplo:

Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName 
/SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ] 
/SQLCOLLATION=CollationName 

5) Cree todas las bases de datos y todos los objetos en ellas.

6) Importe todos sus datos.

0

Prueba esto

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

he creado un simple UDF para ello:

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 

entonces usted puede utilizar fácilmente en cualquier columna de la WHERE cláusula.

Para usar el ejemplo OP:

SELECT * 
FROM MyTable 
WHERE dbo.fnIsStringAllUppercase(FirstName) = 1 
Cuestiones relacionadas