2

このようなデータを含むMySQLデータベースにテーブルがあります。

ID  text
1   Action Jackson
2   The impaler
3   The chubby conquistador
4   Cornholer

先頭の「The」を除いたアルファベット順に表示したい。これが私が思いついたものです。

SELECT ID, CASE LEFT(l.text, 4) WHEN "The " THEN CONCAT(RIGHT(l.text, LENGTH(l.text) - 4), ", The") ELSE l.text END AS "word"
FROM list l

この解決策は少し不格好に思えますが、もっとエレガントな答えはありますか?

4

3 に答える 3

1

これがあなたが探しているものだと思います:

SELECT ID,
       text
FROM list l
ORDER BY TRIM(LEADING 'The ' FROM text);
于 2012-08-09T10:20:02.383 に答える
1

できれば、データを少し再構築することを考えます..このように動的に行うのではなく、mysql インデックスと適切な並べ替えに依存する方が何百倍も優れています。

「The」を削除するフィールドを追加して、それでソートするのはどうですか? いくつかのトリガーを使用して、このセカンダリ フィールドが常に正しいことを確認できます。

于 2012-08-09T10:20:02.993 に答える
1
SELECT TRIM(LEADING 'The' FROM text) as word 
FROM list 
ORDER BY TRIM(LEADING 'The' FROM text)
于 2012-08-09T10:20:10.503 に答える