SQLSERVER/MSSQLでSQL Server内の特定の文字で始まるアルファベット順に並べなさい、ここで問題です。結果のレコードが
例:
'Ioren' 'Iumen' 'タルト' 'Arfen' 'Coldry'
私は労働組合または複数のSQL文を使用したくない...だけ特別句で注文して捕まえようとする。
私が試してみた:
ORDER BY <field> REGEXP '^I' DESC
が、それはうまくいきませんでした。
アイデア?
SQLSERVER/MSSQLでSQL Server内の特定の文字で始まるアルファベット順に並べなさい、ここで問題です。結果のレコードが
例:
'Ioren' 'Iumen' 'タルト' 'Arfen' 'Coldry'
私は労働組合または複数のSQL文を使用したくない...だけ特別句で注文して捕まえようとする。
私が試してみた:
ORDER BY <field> REGEXP '^I' DESC
が、それはうまくいきませんでした。
アイデア?
これはそれを行う必要があります。
はORDER BY CASE WHEN SUBSTRING([Translation Color],1,1) = 'l'
THEN 1 ELSE 0 END DESC
EDIT:それから、私から始まる完全注文時間に戻ってラウンドをループため
完全答えは次のとおりです。
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
このことに注意してください大きなテーブルのパフォーマンスに影響します。また
これは何かいいです:
select [Translation Color],
case when [Translation Color] < 'l' then 1
else 0
end as Priority
from t1
order by Priority, [Translation Color]
これはalphabeticly '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
+1:素敵な答え、非常にきれいですが、selectステートメントで別の要素を使用します – cjk
私の編集は完全に動作しますが、order by節は使用しません。 –
... * now * order by節を使用していません! –
SELECT *
FROM [Translation Color]
ORDER BY
CASE WHEN [Language Code] LIKE '[I-Zi-z]%' THEN 0 ELSE 1 END,
[Language Code]
+1:いい答えですが、大きなデータセットではLIKE句がかなり遅くなる可能性がありますが、私の場合ほど遅くない可能性があります:)(ただし、これは小さなルックアップテーブルと仮定します) – cjk
@ck、LIKEは理想的ではありませんが、 [言語コード]列の任意のインデックスを使用できるはずです。 SUBSTRING、ASCII、UPPERなどを使用するとテーブルスキャンが必要になると思われます。 – LukeH
@ck、私はそれがおそらく小さなルックアップテーブルであることに同意します。しかし、たとえパフォーマンスの低下が不可欠ではないとしても、私の答えはすべての文字列関数よりも読みやすいと思います。 – LukeH
==エラーが発生しますが、1つは機能します!ありがとうございました – apelliciari
特に、大規模なデータセットを持っている、または持っている可能性がある場合は、パフォーマンスは許容されていることを確認してください。 –
ええ、申し訳ありませんが、moでC#でコーディングしていますが、正しく編集しました。 – cjk