2008-12-11 11 views
5

Gibt es eine Möglichkeit zum einfachen Sortieren in SQL Server 2005, während Bindestriche in einem Zeichenfolgenfeld ignoriert werden? Derzeit muss ich eine REPLACE (Feldname, '-', '') oder eine Funktion ausführen, um den Bindestrich in der Sortierklausel zu entfernen. Ich hatte gehofft, dass es eine Flagge gibt, die ich am Anfang der gespeicherten Prozedur oder etwas setzen könnte.SQL-Sortierung und Bindestriche

Zugriff und die GridView-Standardsortierung scheint den Hypen in Strings zu ignorieren.

Antwort

15

Ich lernte etwas Neues, wie Sie genauso gut

ich den Unterschied glauben, zwischen einer ist „String Sort“ vs einem „Wortsortierung“ (ignoriert Bindestrich)

Beispiel Differenz zwischen WORD Art und STRING Art http://andrusdevelopment.blogspot.com/2007/10/string-sort-vs-word-sort-in-net.html

Von Microsoft http://support.microsoft.com/kb/322112

Zum Beispiel, wenn Sie mit dem SQL Sortierungs "SQL_Latin1_General_CP1_CI_AS", die Nicht-Unicode-String 'ac' kleiner als der String 'ab', weil der Bindestrich ("-") sortiert wird als ein separates Zeichen, das vor "b" kommt. Wenn Sie jedoch diese Strings in Unicode konvertieren und Sie führen den gleichen Vergleich, das Unicode-String N'a-c ‚ gilt als N'ab größer sein‘ , weil die Unicode Sortierregeln verwenden ein „Wort Sortierung ", die den Bindestrich ignoriert.

Ich habe einige Beispielcode Sie auch mit dem COLLATE spielen können, das finden, um die Arbeit mit Ihrem

Sortierung
DECLARE @test TABLE 
(string VARCHAR(50)) 

INSERT INTO @test SELECT 'co-op' 
INSERT INTO @test SELECT 'co op' 
INSERT INTO @test SELECT 'co_op' 

SELECT * FROM @test ORDER BY string --COLLATE SQL_Latin1_General_Cp1_CI_AS 
--co op 
--co-op 
--co_op 

SELECT * FROM @test ORDER BY CAST(string AS NVARCHAR(50)) --COLLATE SQL_Latin1_General_Cp1_CI_AS 
--co op 
--co_op 
--co-op 
+0

funktionierte super, danke! – tidge

Verwandte Themen