4

SQLSERVER/MSSQL では、ここに問題があります。

SELECT * from [Translation Color] order by [Language Code] 

「I」の文字から始まるアルファベット順に並べられたレコードが必要です。

結果の例:

「イオレン」「イウメン」「タルト」「アーフェン」「コールドリー」

ユニオンやそれ以上の sql ステートメントを使用したくありません。order by 特殊句でそれをキャッチしてみてください。

私は試してみました:

ORDER BY <field> REGEXP '^I' DESC

しかし、うまくいきませんでした。

何か案は?

4

3 に答える 3

3

これはそれを行う必要があります:

ORDER BY CASE WHEN SUBSTRING([Translation Color],1,1) = 'l' 
     THEN 1 ELSE 0 END DESC

編集:

i から完全に順序付けを行い、h にループバックする完全な答えは次のとおりです。

ORDER BY CASE WHEN ASCII(UPPER(SUBSTRING([Translation Color],1,1))) < 73 
         THEN ASCII(UPPER(SUBSTRING([Translation Color],1,1))) + 26
         ELSE ASCII(UPPER(SUBSTRING([Translation Color],1,1))) END ASC,       
         [Translation Color] ASC

これは、大きなテーブルでのパフォーマンスに影響することに注意してください。

于 2009-04-02T09:27:31.320 に答える
2
SELECT *
FROM [Translation Color]
ORDER BY
    CASE WHEN [Language Code] LIKE '[I-Zi-z]%' THEN 0 ELSE 1 END,
    [Language Code]
于 2009-04-02T10:26:38.243 に答える
2

あるいは、これは良いですか:

select [Translation Color], 
  case when [Translation Color] < 'l' then 1
                     else 0 
                     end as Priority
from t1 
order by Priority, [Translation Color]

これにより、「l」から始まるアルファベット順に並べられます

編集 このソリューションは私にとってはうまくいくようです:

create table t1 ( c1 varchar(20) collate SQL_Latin1_General_Cp437_CI_AS)

次に、いくつかのテストデータを入力してから、これを実行します:

select c1 
from t1 
order by case when c1 >= 'l' then 0 else 1 end, c1
于 2009-04-02T10:01:02.267 に答える