Вопрос

Я немного копаю и ищу объяснения о том, как оценивает SQL Server MIN(Varchar).

Я нашел это замечание в BOL: MIN находит наименьшее значение в последовательности сбора, определенной в базовой базе данных

Так что, если у меня есть таблица с одной строкой со следующими значениями:

Data

AA
AB
AC

Делая а SELECT MIN(DATA) вернется обратно Аа. Я просто хочу понять, почему за этим и понять Бол немного лучше.

Спасибо!

Это было полезно?

Решение

Это определено сопоставление (Порядок сортировки). Для большинства культур порядок сбора такой же, как в алфавитном порядке в английском алфавите, так что:

  • 'Aa' <'ab'
  • 'Aa' <'ac'
  • 'Ab' <'ac'

Поэтому «Аа» является минимальным значением. Для других культур это может не соблюдать. Например, датское сопоставление вернет «ab» как минимум, потому что «aa»> 'ab'. Это связано с тем, что «АА» рассматривается как эквивалентная «Å», которая является последней буквой в датском алфавите.

SELECT MIN(s COLLATE Danish_Norwegian_CI_AS) FROM table1;

min_s
AB

Чтобы получить «обычный» заказ сортировки, использовать Latin1_General_Bin СОЕДИНЕНИЕ:

SELECT MIN(s COLLATE Latin1_General_Bin) FROM table1;

min_s
AA

Чтобы воспроизвести этот результат, вы можете создать эту тестовую таблицу:

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

Другие советы

Нет, MIN используется в операторе SELECT, который сканирует более одной строки. Он принимает столбец в качестве аргумента и возвращает значение «самого низкого» (опять же, в соответствии с последовательности сбора), найденного в этом столбце.

Используется без положения группы по пункту, набор результатов будет иметь одну строку, а значение MIN будет самым низким значением, найденным в этом столбце. Используемый с пунктом группы по группе, набор результатов будет иметь одну строку для каждой группы, и значение MIN будет самым низким значением в этом столбце для любой строки в группе.

min (x), где находится char (string) type - char (), varchar (), nchar (), nvarchar (), находит самое низкое значение в группе, на основе правил сравнения строк SQL:

  • Если две строки различаются по длине, более короткий сформул сочетается с символами SP (пространства) до длины дольше.
  • Сравнение проходит слева направо, характер по характеру, в соответствии с правилом используемой последовательности сбора.
  • Для сравнения, значение Null сравнивается ниже, чем любые не нулевые значения (стандарт ISO/ANSI SQL говорит, что это выбор реализации относительно того, сопоставляет ли нуль ниже или выше любого не нулевого значения).

Итак, если у вас есть таблица

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

Затем запустить запрос

select min(myString) from foo

даст вам такой же результат, как и вы выполнили

set rowcount 1

select myString
from foo
order by myString

set rowcount 0

Вы в основном заказываете набор в восходящей последовательности и выбираете первое значение. Max (), или, конечно, дает вам обратный, заказывая набор в нисходящей последовательности и выбирая первое значение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top