8

私はこの出力を得ようとしています。

MDT 1
MDT 2
MDT 3
MDT 11
MDT 44

ただし、値はアルファベット順に並べられているため、123 が 2 より前になります。

例 :

MDT 1
MDT 11
MDT 156
MDT 2
MDT 3
MDT 303
MDT 44

等々。

私はこのコードを使用していますが、うまくいかなかったようです。

SELECT * FROM file ORDER BY ABS(ID) ASC

どうすればこれを解決できますか?

4

5 に答える 5

2

ID に常にプレフィックス as が含まれる場合は、MDTこれを使用して、要件に従って並べ替えることができます。

SELECT * FROM File 
ORDER BY CAST(replace(ID, 'MDT ', '') AS UNSIGNED) ASC

SQLFiddle デモ

于 2012-12-04T04:19:17.210 に答える
1

そのスニペットを試してください

SELECT * FROM file ORDER BY ID + 0 ASC
于 2012-12-04T04:14:54.300 に答える
1

このようにしてみてください。数値に基づいてソートされます:

select substr(id,4)*1 from file order by substr(id,4)*1

それは与えます

1
2
3
11
44
​​ ...

すべてのフィールドが必要な場合は、文字列の長さに基づいて以下のクエリ ( "substr(id,4)" または "substr(id,5)" ) を試してください (例: id= proj-001911 --> SUBSTR( id, 6 を取る) ) *1) )

select * from file order by substr(id,4)*1
于 2012-12-04T04:31:02.590 に答える
0
SELECT * FROM file
ORDER BY CONVERT(SUBSTRING(ID,5),UNSIGNED) ASC

SUBSTRING()'MDT '後にすべての文字を抽出し、CONVERT()残りの部分文字列を符号なし整数に変更しますORDER BY

note SUBSTR()は の同義語ですSUBSTRING()

于 2012-12-04T04:29:36.173 に答える