2017-05-23 21 views
1

数字とvarcharの両方の値( '2008'、 'n/a')の両方を含む列の最大値をとっています。最大値とは何ですか?文字列または数値ですか?Microsoft SQL Server最大文字数と同じ列の数値

私はMicrosoft SQL Serverで作業しています。

ありがとうございます!

+1

' '2008''が文字列ではなく、番号です。列は 'varchar'と' numeric'の両方のデータ型にすることはできません。それは文字列の比較を使用しています。あなたの例では、「n/a」は2つのうちの最大値です。 – Siyual

+0

あなたは正しいです。それらの2つの値のうちのどれが最大値として取られるか? – Melissa

+1

''n/a''は2つのうちの最大値になります。 – Siyual

答えて

1

文字列の場合、MAXは照合順序で最高の値を見つけます。 - max() docs

あなたはここでorder by col desc


は、いくつかの列に投げ込まれた値とソート降順であるかのように、それは同じ値になります。

+------------+ 
| col  | 
+------------+ 
| Z   | 
| na   | 
| n/a/  | 
| 9999999999 | 
| 30   | 
| 2008  | 
| 00000000 | 
+------------+ 

max()は次のようになり上記の最初の値。 Z

rextesterデモ:http://rextester.com/IXXX76837


正確な順序は、あなたのコラムのあなたの照合(Latin1_General_CI_ASに最もデフォルト)に依存します。ここで

(バイナリラテン/一般ラテン)あなたにいくつかの別の照合のための各文字のソート順を示したデモです

rextesterデモ:http://rextester.com/WLJ38844

-1
create table one 
(
Col1 varchar(200) 
) 
insert into one(Col1) 
values('2008'),('n/a'),('aaaa'),('bbb'),('zzzz') 

select max(Col1) from one 
--zzzz 
+0

これはどのように彼らの質問に答えますか? – Siyual

+0

ちょうど例を挙げました。最大とするときに数字と文字列が混在しているときに意味がありません –

-1

N /知られている「N /」値を排除し、最大または最小の機能を付与しながら、意味のあるいくつかのことにそれらをキャストする方がよい

最大になります。

select max(cast(column as int)) 
 
from tablename 
 
where column != 'n/a'

関連する問題