2010-04-15 26 views
27

Tengo el problema de que MSSQL Server 2000 debe seleccionar algunos valores distintos de una tabla (la columna específica es del tipo nvarchar). Existen las veces los mismos valores, pero con diferentes casos, por ejemplo (pseudocódigo):"SELECT DISTINCT" ignora casos diferentes

SELECT DISTINCT * FROM ("A", "a", "b", "B") 

volverían

A,b 

Pero no quiere (y esperan)

A,a,b,B 

porque en realidad son valores diferentes.

¿Cómo solucionar este problema?

+2

¿Qué colación usas para la columna? –

Respuesta

47

La intercalación se establecerá en mayúsculas y minúsculas.

que tiene que hacer algo como esto

Select distinct col1 COLLATE sql_latin1_general_cp1_cs_as 
From dbo.myTable 
+0

No conocía COLLATE, pero esa es la solución. Aceptaré este, tan pronto como me sea permitido (quedan 6 minutos). ¡Gracias! – powerbar

+4

¡No olvide agregar 'como col1' para evitar perder el nombre de la columna en el resultado! – MKorsch

+0

'latin1_general_ci' funciona para la mayoría de los caracteres latinos, pero' utf8mb4_unicode_ci', como se muestra en ['mostrar intercalación'] (https://dev.mysql.com/doc/refman/5.7/en/show-collation.html) debe trabaja para todo. –

1
SELECT DISTINCT 
    CasedTheColumn 
FROM 
    (
    SELECT TheColumn COLLATE LATIN1_GENERAL_BIN AS CasedTheColumn 
    FROM myTAble 
    )FOO 
WHERE 
    CasedTheColumn IN ('A', 'a'...) 
0

Intente configurar la collation de la columna en cuestión a algo binario, por ejemplo, utf8-bin. Puede hacer eso in the SELECT statement itself o cambiando directamente la estructura de su tabla (lo que significa que no tiene que mapear la intercalación cada vez que se ejecuta la consulta, ya que la almacenará correctamente internamente).

4

Use BINARY para esta operación. Reparto de la columna a binario, así:

SELECT DISTINCT BINARY(column1) from table1; 

Sólo cambia column1 y table1 según su esquema.

Ejemplo completo que funciona para mí en MySQL 5.7, debe trabajar para otros:

SELECT DISTINCT BINARY(gateway) from transactions; 

Salud!

+0

¡Opción mucho más limpia! – brianlmerritt

+0

Esto es mucho mejor. No quiero cambiar la intercalación de todas las tablas en las que tengo que hacer una búsqueda como esta. – carla