2009-09-17 8 views
2

名前で列をソートして、いくつかの項目である引用符を無視しますか?名前で並べ替えますが、引用符は無視しますか?

例えば

"これはクールだ"

別の記事

条2

こんにちは

なりソートなど:

引用符がデータベースにすでにある別の記事

条2

こんにちは

"これはクールだ"

...

ORDER BY

答えて

2
SELECT * FROM yourTable ORDER BY TRIM(BOTH '"' FROM title); 
+0

美しく働いた! – kylex

+0

これは大きなデータセットでは遅くなります! – jor

+0

さらに複雑な要件の場合、別のオプションとして、事前処理されたバージョンの値を保持するソート用の専用列を含むように、事前にテーブルを計画することもできます。たとえば、 'name =" Dr。Strange Love "と' name_sort = "Love、Strage、Dr." – Afilu

1
SELECT * 
FROM table 
ORDER BY CASE WHEN len(col) >= 2 
       THEN REPLACE(LEFT(COL, 1), '"', '') 
       + RIGHT(LEFT(col, LEN(col)-1), LEN(LEFT(col, LEN(col)-1))-1) 
       + REPLACE(RIGHT(col, 1), '"', '') 
       ELSE col 
     END 

、I二重引用符を削除するには、 '内'の最初の&最後の文字を ''で置き換えます。もちろん、長さ> = 2の場合にのみ有効です。

5

使用している言語によって異なります。 MS SQLでは、REPLACEコマンドを使用します。

SELECT  * 
FROM   dbo.Users 
ORDER BY REPLACE(firstName, '"', '') 
+0

REPLACEは名前からすべての引用符を削除します。 –

+2

あなたはそうです。しかし、データ自体からではなく、ソート時にのみ削除されます。 kylexは引用符なしですべてを並べ替えたいと思うようです。これは次のようなものを並べ替えます: アルティクル3 悪い例ですが、今のところ私は考えることができますどちらの方法でも、返されるデータには影響しないため、問題はないと思います。 – JohnathanKong

+0

しかし、何らかの方法でソート順に影響しませんか? –

0
SELECT name 
FROM myTable 
ORDER BY replace(name, '"', '') 
3

トリックこと:私はテーブルを持っているのであれば、私はによってソートしています列の最初の名前を持つユーザーが、私はこれを行う文字列のうち、すべての二重引用符を取り除きいますTRIM()またはREPLACE()をベースにした解決策は、最初の文字が引用符(または拡張子は英数字以外の文字)のみにフォーカスすることです。

ORDER BY CASE LEFT(myCol, 1) 
     WHEN '"' THEN REPLACE(myCol, '"', '') 
     ELSE myCol 
    END CASE 

は一般に、大きなデータセットに対して、このような処理は、表示目的のための列とは対照的に、目的を照会するための列を添加して、例えば、負荷時に行わなければなりません。

関連する問題