1

サンプルデータがあります

SMMP022011304196
SMMP022011304199    
SMMP022011304197    
SMMP022011304193
SMMP022011304195    
SMMP022011304198    
SMMP022011304192    
SMMP0220113041910   
SMMP022011304191
SMMP022011304194

使用するSELECT myfield from mytable order by myfield DESC と、このような結果が得られました

SMMP022011304199    
SMMP022011304198    
SMMP022011304197    
SMMP022011304196    
SMMP022011304195    
SMMP022011304194    
SMMP022011304193    
SMMP022011304192    
SMMP0220113041910   
SMMP022011304191

このような結果を得るのを手伝ってください:

SMMP0220113041910   
SMMP022011304199    
SMMP022011304198    
SMMP022011304197    
SMMP022011304196    
SMMP022011304195    
SMMP022011304194    
SMMP022011304193    
SMMP022011304192    
SMMP022011304191
4

4 に答える 4

2

フィールドの長さで並べ替えてから、同じ長さの値を並べ替えます。

SELECT myfield from mytable order by 
LENGTH(myfield) DESC,
myfield DESC

SQLFiddle デモ

于 2013-04-19T08:35:26.733 に答える
1

これはうまくいっています。以下のコードは、SQL Server 2008 R2 で機能します。

SELECT 
   myfield  
FROM mytable 
ORDER BY 
    LEN(myfield) DESC 
    ,myfield DESC
于 2013-04-19T08:51:13.627 に答える
1

データの前に常に SMMP がある場合は、以下を使用できます。

ORDER BY LPAD(REPLACE(myfield,'SMMP',''),15,'0') desc;

このメソッドのロジックは、前の 4 文字を無視し、後ろの数値のみを並べ替えるというものです。

于 2013-04-19T08:35:20.467 に答える