2012-01-16 5 views

答えて

1

個別に選択する必要はなく、ORDER BY部分を数値として指定するだけです。

SELECT * FROM article ORDER BY CAST(numbers AS SIGNED) DESC; 
-1
select * from article order by numbers DESC 

として番号順になり、この

select * from article order by numbers DESC 

を達成することができます:DESC(エンディング)とASC(エンディングは、 )(ASCデフォルトです)。

+0

文字列を数値に変換するかどうか質問します。彼はすでに元の投稿にDESCを持っています。 – Travesty3

+0

彼は今、その前にそれを持っていなかった;-)。また、数字と数字を含む文字列をソートすると同じ結果が得られます。 – JNDPNT

+0

それはありません。 OPが述べているように、数字は数字ではなく文字列としてソートされています。降順で文字列としてソートすると、90が100よりも前になります(文字列ソートのように最初の文字を比較するため、9> 1)。だからあなたを数字にキャストしなければならないのです。 – Travesty3

0

変換が必要な場所でSQLがCAST()関数を使用できるように、正確な列を指定する必要があります。

SELECT CAST(numbers AS INT) FROM article ORDER BY numbers DESC 

これは、アルファベット順ではなく正しい順序で数値を返します。

0

"文字列"とは、 "VARCHAR"を意味します。 INTを使用して数値を数値として保存すると、多くの問題を解決できます。

このように数字を格納することを避けることができない場合は、正しい順序で返されるように、常にゼロを特定のサイズに埋め込むことができます。

2

あなたは数値をvarcharとして保存しています。数値ではありません。それらは文字列としてソートされています

SELECT numbers 
FROM article 
ORDER BY CAST(numbers AS INT) DESC; 

数字の場合はそのように保存してください。また、CASTのためにインデックスを使ってこのソートを最適化することはできません

関連する問題