私は少し掘り下げて、SQL サーバーがどのように評価するかについての説明を探していますMIN(Varchar)
。
BOL でこの発言を見つけました: MIN は、基になるデータベースで定義された照合順序で最小値を見つけます
したがって、次の値を持つ行が 1 つあるテーブルがあるとします。
Data
AA
AB
AC
を実行するSELECT MIN(DATA)
と AA が返されます。この背後にある理由を理解し、BOL をもう少しよく理解したいだけです。
ありがとう!
私は少し掘り下げて、SQL サーバーがどのように評価するかについての説明を探していますMIN(Varchar)
。
BOL でこの発言を見つけました: MIN は、基になるデータベースで定義された照合順序で最小値を見つけます
したがって、次の値を持つ行が 1 つあるテーブルがあるとします。
Data
AA
AB
AC
を実行するSELECT MIN(DATA)
と AA が返されます。この背後にある理由を理解し、BOL をもう少しよく理解したいだけです。
ありがとう!
照合順序(ソート順)によって決定されます。ほとんどの文化では、照合順序は英語のアルファベットのアルファベット順と同じです。
したがって、「AA」が最小値です。他の文化では、これは成り立たないかもしれません。たとえば、デンマーク語の照合では、'AA' > 'AB' であるため、最小値として 'AB' が返されます。これは、'AA' がデンマーク語アルファベットの最後の文字である 'Å' と同等に扱われるためです。
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 ステートメントで使用されます。列を引数として取り、その列で見つかった「最も低い」値 (照合順序に従って) を返します。
GROUP BY 句なしで使用すると、結果セットは 1 つの行になり、MIN の値はその列で見つかった最小値になります。GROUP BY 句とともに使用すると、結果セットにはグループごとに 1 つの行が含まれ、MIN の値はグループ内の任意の行のその列の最小値になります。
min(x) は char (文字列) 型です -- char()、varchar()、nchar()、nvarchar() は、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() または course は、セットを降順で並べ替え、最初の値を選択するという逆の結果を返します。