34

私は次のようなテーブルを持っています:

id  name
--------
1   clark_009
2   clark_012
3   johny_002
4   johny_010

次の順序で結果を取得する必要があります。

johny_002
clark_009
johny_010
clark_012

私がすでに試したことを私に聞かないでください、私はこれを行う方法がわかりません。

4

5 に答える 5

67

これにより、右端の3文字を選択し、その値の昇順で並べ替えるだけで済みます。

SELECT *
FROM table_name
ORDER BY RIGHT(name, 3) ASC;

データが大きくなるにつれて、これは非効率的なソリューションになることを付け加えておく必要があります。最終的には、ソートが最適に効率的になるように、数値の付録を別のインデックス付き整数列に格納することをお勧めします。

于 2012-12-05T20:42:18.333 に答える
9

これを試してみてください。

SELECT * FROM Table order by SUBSTRING(name, -3);

幸運を!

于 2012-12-05T20:44:56.410 に答える
4

substring_index関数を適用して、これらの値を解析できます-

select * from table order by substring_index(name, '_', -1)
于 2012-12-05T20:56:05.103 に答える
4

MySQLSUBSTRING()関数を使用してサブストリングでソートできます

構文: SUBSTRING(string,position,length)

例:文字列の最後の3文字で並べ替える

SELECT * FROM TableName ORDER BY SUBSTRING(FieldName, -3);
#OR
SELECT * FROM TableName ORDER BY SUBSTRING(FieldName, -3,3);

例:文字列の最初の3文字で並べ替える

SELECT * FROM TableName ORDER BY SUBSTRING(FieldName, 1,3);

注: Positive位置/インデックスNegativeは文字列の左から右に始まり、位置/インデックスは文字列の右から左に始まります。

SUBSTRING()関数の詳細は 次のとおりです。

于 2017-07-27T09:36:22.017 に答える
0

名前の長さが可変の最後の3文字(左から右)で並べ替える場合は、次のことを提案します。

SELECT *
FROM TABLE
ORDER BY SUBSTRING (name, LEN(name)-2, 3)

インデックスは、最後から3番目の文字である名前-2の長さから始まります。

私は少し遅れていますが、同じ問題に遭遇したばかりで、これは私を助けました。

于 2022-01-30T13:11:49.320 に答える