Frage

Ich mache ein wenig zu graben und suchen nach einer Erklärung, wie SQL Server wertet MIN(Varchar).

Ich fand diese Bemerkung in BOL: MIN den niedrigsten Wert in der Sortierfolge findet in der zugrunde liegenden Datenbank definiert

Also, wenn ich eine Tabelle, die eine Zeile mit den folgenden Werten hat:

Data

AA
AB
AC

ein SELECT MIN(DATA) Dies würde wieder zurück AA. Ich will einfach nur besser ist die, warum dahinter und verstehen die BOL ein wenig zu verstehen.

Danke!

War es hilfreich?

Lösung

Es bestimmt wird von der Sortierungs ( Sortierung). Für die meisten Kulturen sind die Sortierreihenfolge die gleiche wie die alphabetische Reihenfolge in Englisch so Alphabet:

  • 'AA' < 'AB'
  • 'AA' < 'AC'
  • 'AB' < 'AC'

Deshalb ‚AA‘ ist der Minimalwert. Für andere Kulturen kann dies nicht halten. Zum Beispiel kann ein Sortierungs dänischen würde ‚AB‘ als Minimum zurück, weil ‚AA‘> ‚AB‘. Dies liegt daran, ‚AA‘ als gleichwertig mit ‚A‘ behandelt wird, die der letzte Buchstabe im dänischen Alphabet ist.

SELECT MIN(s COLLATE Danish_Norwegian_CI_AS) FROM table1;

min_s
AB

Um eine „gewöhnliche“ Sortierreihenfolge verwenden, um die Latin1_General_Bin Sortierungs zu erhalten:

SELECT MIN(s COLLATE Latin1_General_Bin) FROM table1;

min_s
AA

Um dieses Ergebnis reproduzieren Sie diesen Test Tabelle erstellen:

CREATE TABLE table1 (s varchar(100));
INSERT INTO table1 (s) VALUES ('AA'), ('AB'), ('AC');

Andere Tipps

Nein, MIN in einer SELECT-Anweisung verwendet, dass Scans mehr als eine Zeile. Es dauert eine Spalte als Argument und gibt den „niedrigsten“ Wert (wiederum entsprechend die Kollatierungssequenz) in dieser Spalte zu finden.

Gebraucht ohne GROUP-BY-Klausel wird die Ergebnismenge eine einzelne Reihe aufweist, und der Wert von MIN wird der niedrigste Wert in dieser Spalte zu finden. Verwendet mit einem GROUP BY-Klausel wird die Ergebnismenge für jede Gruppe eine Zeile hat, und der Wert von MIN wird der niedrigste Wert in der Spalte für jede Zeile in der Gruppe sein.

min (x), wobei ein char (string) Art - char (), varchar (), nchar (), nvarchar () findet den niedrigsten Wert in der Gruppe, basierend auf SQL Stringvergleichsregeln:

  • , wenn zwei Strings in der Länge unterscheiden, desto kürzer ist gepolstert mit SP-Zeichen (Leerzeichen) auf die Länge der längeren.
  • Vergleich Erlös von links nach rechts, Zeichen für Zeichen, nach der Regel der Kollatierungssequenz in Gebrauch ist.
  • in Vergleiche, vergleicht der Wert NULL niedriger als alle Nicht-Null-Werte (die ISO / ANSI SQL-Standard sagt, dass es eine Implementierung Wahl ist, ob NULL kollationiert niedriger oder höher als jeder Nicht-Null-Wert).

Also, wenn Sie eine Tabelle

create table foo
(
  myString varchar(16) not null ,
)

Sie dann die Abfrage ausgeführt

select min(myString) from foo

geben Sie das gleiche Ergebnis Satz, als ob Sie ausgeführt

set rowcount 1

select myString
from foo
order by myString

set rowcount 0

Sie bestellen im Grunde die Menge in aufsteigender Reihenfolge und den ersten Wert auswählen. MAX () oder natürlich gibt Ihnen die inversen, die Menge der Bestellung in Reihenfolge absteigend und den ersten Wert auswählen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top