0

次の TEAM_TOTAL 列の説明を並べ替えようとしています

MATCHID     TEAM_TOTAL        
 ----------  ----------------- 
 573         Total   112       
 573         Total  2 for  115 
 574         Total  9 for  97  
 574         Total  2 for  100 
 575         Total  9 for  129 
 575         Total  9 for  101 
 576         Total  4 for  191 
 576         Total  9 for  160 
 577         Total  8 for  157 
 577         Total  7 for  137 
 578         Total  6 for  193 
 578         Total   119 

しかし、問題は TEAM_TOTAL が varchar であることです。クエリだけでソートされた降順で結果を取得できる方法はありますか。さらに、そのコラムにはテキストもあります。これを実現するためのアイデアが不足しています

結果は以下の結果セットのようになるはずです

   MATCHID     TEAM_TOTAL        
  ----------  ----------------- 
  578         Total  6 for  193
  576         Total  4 for  191  
  576         Total  9 for  160 
  577         Total  8 for  157 
  577         Total  7 for  137
  575         Total  9 for  129
  578         Total   119 
  573         Total  2 for  115 
   573         Total   112 
  575         Total  9 for  101
  574         Total  2 for  100
  574         Total  9 for  97
4

2 に答える 2

2

これを試してください:

select * from t
order by substring(
    team_total, locate('for', team_total) + 
        if(locate('for', team_total) > 0, 4, 7))+0 desc

ここでフィドル。

于 2012-04-21T08:41:54.573 に答える
0

整数 (最後のスペースの後の文字列) を抽出してみてください。

-- 'Total 112' - extracts 112
SELECT SUBSTRING('Total  112', LENGTH('Total  112') - LOCATE(' ', REVERSE('Total  112'))); 

-- 'Total  6 for  193' - extracts 193
SELECT SUBSTRING('Total  6 for  193', LENGTH('Total  6 for  193') - LOCATE(' ', REVERSE('Total  6 for  193')));

これで、その文字列を数値に変換して並べ替えることができます。

SELECT * FROM teams
ORDER BY
CAST(SUBSTRING(TEAM_TOTAL, LENGTH(TEAM_TOTAL) - LOCATE(' ', REVERSE(TEAM_TOTAL))) AS INT) DESC
于 2012-04-21T08:23:41.773 に答える