sql server - truncar - SERVIDOR SQL-Entendiendo cómo funciona MIN(texto)
substring sql (3)
Estoy investigando un poco y buscando una explicación sobre cómo SQL Server evalúa MIN(Varchar)
.
Encontré esta observación en BOL: MIN encuentra el valor más bajo en la secuencia de clasificación definida en la base de datos subyacente
Entonces si tengo una tabla que tiene una fila con los siguientes valores:
Data
AA
AB
AC
Haciendo un SELECT MIN(DATA)
regresaría de nuevo AA. Solo quiero entender el porqué de esto y entender un poco mejor el BOL.
¡Gracias!
Está determinado por la collation (orden de clasificación). Para la mayoría de las culturas, el orden de colación es el mismo que el orden alfabético en el alfabeto inglés, por lo que:
- ''AA'' <''AB''
- ''AA'' <''AC''
- ''AB'' <''AC''
Por lo tanto, ''AA'' es el valor mínimo. Para otras culturas esto puede no ser válido. Por ejemplo, una clasificación danesa devolvería ''AB'' como mínimo porque ''AA''> ''AB''. Esto se debe a que ''AA'' se trata como equivalente a ''Å'', que es la última letra del alfabeto danés.
SELECT MIN(s COLLATE Danish_Norwegian_CI_AS) FROM table1; min_s AB
Para obtener un orden de clasificación "ordinario", use la Latin1_General_Bin
:
SELECT MIN(s COLLATE Latin1_General_Bin) FROM table1; min_s AA
Para reproducir este resultado puedes crear esta tabla de prueba:
CREATE TABLE table1 (s varchar(100)); INSERT INTO table1 (s) VALUES (''AA''), (''AB''), (''AC'');
No, MIN se usa en una instrucción SELECT que escanea más de una línea. Toma una columna como argumento y devuelve el valor "más bajo" (nuevamente, de acuerdo con la secuencia de clasificación) que se encuentra en esa columna.
Utilizado sin una cláusula GROUP BY, el conjunto de resultados tendrá una sola fila y el valor de MIN será el valor más bajo encontrado en esa columna. Utilizado con una cláusula GROUP BY, el conjunto de resultados tendrá una fila para cada grupo y el valor de MIN será el valor más bajo en esa columna para cualquier fila en el grupo.
min (x), donde es un tipo char (cadena) - char (), varchar (), nchar (), nvarchar (), encuentra el valor más bajo en el grupo, basado en las reglas de comparación de cadenas de SQL:
- Si las dos cadenas difieren en longitud, la más corta se rellena con caracteres SP (espacios) en la longitud de la más larga.
- la comparación procede de izquierda a derecha, carácter por carácter, de acuerdo con la regla de la secuencia de intercalación en uso.
- en las comparaciones, el valor NULL se compara con un valor inferior a cualquier valor no nulo (el estándar ISO / ANSI SQL dice que es una opción de implementación en cuanto a si NULL se clasifica como inferior o superior a cualquier valor no nulo).
Así que, si tienes una mesa
create table foo
(
myString varchar(16) not null ,
)
luego ejecutando la consulta
select min(myString) from foo
te dará el mismo conjunto de resultados que si ejecutaras
set rowcount 1
select myString
from foo
order by myString
set rowcount 0
Básicamente, está ordenando el conjunto en secuencia ascendente y seleccionando el primer valor. MAX (), o curso, le da el inverso, ordenando el conjunto en secuencia descendente y seleccionando el primer valor.