MySQL は文字列を数値型に変換し、並べ替えます。

サンプルデータ: area_gdp テーブル

id エリア gdp
1 北京 1200
2 上海 6100
3 広州 6000
4 深セン 980
select * from area_gdp ORDER BY gdp ASC

# クエリ結果は次のとおりです
1 北京 1200
3 広州 6000
2 上海 6100
4 深セン 980

SELECT * FROM area_gdp ORDER BY gdp DESC
# クエリ結果は次のとおりです:
4 深セン 980
2 上海 6100
3 広州 6000
1 北京 1200
結果は期待とは異なります。実際、MySQL は想像されているほどスマートではありません。char のデータの場合または varchar 型の場合のみ、文字列として扱われるため、文字列内の各文字が順番にソートされます。

char または varchar が数値を格納することが明確にわかっている場合は、並べ替えの際にフィールドを数値に変換し、目的の並べ替え機能を実現できます。ここでは 3 つの方法を紹介しますが、他にもっと良い方法がある場合は、相互に通信できます。

サンプルデータ: area_gdp テーブル

ID エリア GDP
1 北京 1200
2 上海 6100
3 広州 6000
4 深セン 980


1. 方法 1: フィールド値 + 0
MySql がコンテキストに応じて自動的に型を変換します ここでは、元々文字型だったフィールド値が数値として返されます フィールドに格納されている値が数字の場合の場合は数値に変換して返しますが、フィールドに格納されている値が文字や漢字の場合は、そのまま0を返します。

# 例

SELECT 'abd'+0 # 結果は 0 
SELECT 'abd5'+0 # 結果は 0 
SELECT '5abd'+0 # 結果は 5
SELECT '5abd5'+0 # 結果は 5
SELECT '55'+0 # 結果は 55

# 上記の問題を解く

select * from area_gdp ORDER BY gdp+0 ASC

# クエリ結果は次のとおりです
4 深セン 980
1 北京 1200
3 広州 6000
2 上海 6100

select * from area_gdp ORDER BY gdp+0 DESC
# クエリ結果は次のとおりです
2 上海 6100
3 広州 6000
1 北京 1200
4 深セン 980


2. 方法 2: Cast() 関数
CAST() 関数を使用して、フィールドの値を別の型に変換して出力します。
使用法: CAST (フィールド名 AS 変換型)

select * from area_gdp ORDER BY CAST(gdp AS SIGNED) ASC

# クエリ結果は次のとおりです
4 深セン 980
1 北京 1200
3 広州 6000
2 上海 6100

select * from area_gdp ORDER BY CAST(gdp AS SIGNED) DESC
# クエリ結果は次のとおりです
2 上海 6100
3 広州 6000
1 北京 1200
4 深セン 980

unsigned は符号なしを意味し、小数を表現できません
signed は符号付きを意味し、小数を表現できます


3. 方法 3: CONVERT()
関数を使用して、フィールドの値を別の型に変換して出力します。
使用法: CONVERT (フィールド名、変換後の型)

select * from area_gdp ORDER BY CONVERT(gdp,SIGNED) ASC

# クエリ結果は次のとおりです
4 深セン 980
1 北京 1200
3 広州 6000
2 上海 6100

select * from area_gdp ORDER BY CONVERT(gdp,SIGNED) DESC
# クエリ結果は次のとおりです
2 上海 6100
3 広州 6000
1 北京 1200
4 深セン 980

unsigned は符号なしを意味し、小数を表現できません
signed は符号付きを意味し、小数を表現できます

おすすめ

転載: blog.csdn.net/m0_52191385/article/details/130771862